2010-11-12 48 views
2
WebClient wc = new WebClient(); 
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); 
wc.OpenReadAsync(new Uri(url, UriKind.RelativeOrAbsolute)); 


void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    if (e.Error != null || e.Cancelled) 
    { 
    //randomly, this code gets hit and 
    //there is no inner exception - just says "an exception occurred during a webclient request" 

在代碼中所描述的錯誤發生隨機和如果相同的Web客戶端請求之後,它工作制成。或者,如果有新的資源請求發出,那麼現在出現錯誤的舊的請求會在新的請求之前發出......Web客戶端錯誤(隨機的和非常非常討厭)

這很奇怪,這裏的任何大師都有一個線索,爲什麼它可能是?

編輯:信息錯誤

System.Net.WebException:一個異常 一個Web客戶端請求期間發生。 ---> System.Exception ---> System.Exception:錯誤HRESULT E_FAIL 已從調用COM組件返回。在 System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)at System.Net.BrowserHttpWebRequest。 <> c_ DisplayClass5.b _4(Object sendState)at System.Net.AsyncHelper。 <> C_ DisplayClass2.b _0(對象sendState)---內 異常堆棧跟蹤的末尾在 System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,對象狀態)在 System.Net.BrowserHttpWebRequest .EndGetResponse(IAsyncResult的 asyncResult)在 System.Net.WebClient.GetWebResponse(WebRequest的 請求,IAsyncResult的結果)在 System.Net.WebClient.OpenReadAsyncCallback(IAsyncResult的 結果)---內部異常 堆棧跟蹤結束 - -

該URL是一個簡單的字符串,其計數不超過200.

+1

什麼是異常的類型?您是否嘗試過使用Wireshark來查看網絡級別發生了什麼? – 2010-11-12 07:13:11

+0

@Jon Skeet:例外=「在webclient請求期間發生異常」,這就是我所能得到的。我沒有使用Wireshark,但現在馬上安裝它。然而,使用fiddler我甚至在看到這個錯誤時看不到HTTP請求;然而,當我發出另一個WebClient請求時 - 我得到錯誤的地方出現在fiddler(請求類型= GET,HTTP/1.1)中,並且我提出的新請求也出現在這之後....所以很奇怪。 – VoodooChild 2010-11-12 08:39:19

+0

(只是添加到我的評論):在收到錯誤,並沒有看到它的提琴手會議 - 如果我再打一個電話,現在看到兩個請求在提琴手中,如果我看看請求的細節,當我出現錯誤,我發現'ClientBeginRequest'時間戳是在我發出第二個請求時的較新時間。所以它幾乎就像webClient請求被卡在內存或緩衝區的某個地方,並且在下一個請求中強制它執行。另外,我安裝了WireShark,但自從我以後,我一直無法重新創建這個錯誤 - 但我會在這裏更新一次。 – VoodooChild 2010-11-12 12:45:09

回答

2

如果代碼被取消或生成錯誤,將會觸發該代碼。我懷疑你遇到了網絡問題,所以我會啓動Fiddler並觀看HTTP請求,並確保你正確地取回它們。

+0

我同意,但我運行的問題是,當我收到錯誤時,沒有爲我的'wc.OpenReadAsync(..)'調用進行HTTP請求。然而,當我提出另一個請求時,我會看到兩個請求會話,一個是我得到錯誤的地方,另一個是我剛纔提出的。任何線索? – VoodooChild 2010-11-12 08:42:01

+0

(只是添加到我的評論):在收到錯誤,並沒有看到它的提琴手會議 - 如果我再打一個電話,現在看到兩個請求正在提琴手,如果我看看請求的細節,當我出現錯誤,我發現'ClientBeginRequest'時間戳是在我發出第二個請求時的較新時間。所以它幾乎就像webClient請求被卡在內存或緩衝區的某個地方,並且在下一個請求中強制它執行。 – VoodooChild 2010-11-12 12:44:28

+1

聽起來像網絡緩衝。 Windows網絡堆棧和潛在的網卡(物理和驅動程序軟件)均實現緩衝區。這可能會導致您的網絡請求無法正常工作。您還想檢查緩存問題,之前我有過相同的場景(除了我的客戶端是IE 9),並且導致問題的是IE 9重定向緩存:http://www.sadev.co.za/content/redirected-down-one-way-clearing-internet-explorer-host-redirect-cache我懷疑這是你的問題,因爲你的客戶端是代碼,但是確保你沒有在代碼中的任何地方緩存 – 2010-11-15 07:10:13

0

我會冒險猜測它是超時的。我也想進一步猜測它可能是DNS問題。

DNS有可能超時。這與您在小提琴手中沒有看到請求一致。

我想這不是不可能,那麼當你再次嘗試時,請求會被填充,而這次DNS工作。也許。這一點我有點模糊,但無論如何。

如果您使用帶有IP地址而不是域名的URL,那麼您是否仍然遇到同樣的問題?

+1

關於超時;但它似乎是一個線程問題。調用webClient方法的UI線程可能已被阻塞,並在下一次使用時執行其隊列中的任何請求.... – VoodooChild 2010-11-26 21:20:41

0

很可能URL很長。我在WP8上有2900個符號長度的URL相同的問題URL

相關問題