2011-03-08 139 views
5
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Timeout = 20000; 
using (WebResponse response = request.GetResponse()) 
using (var stream = response.GetResponseStream()) 
using (var reader = new StreamReader(stream)) 
{ 
    var result = reader.ReadToEnd(); 
    // Do something with result 
} 

在上面的例子中,我定義了一個超時,如果碰巧發生了超時,我怎麼會知道結果是空的?Web請求超時處理?

我收到任何響應類型嗎?

我如何確保我超時?

回答

10

GetResponse()會拋出WebException。測試的確很簡單儘管發生了什麼 - 將超時設置爲1ms並嘗試打開需要一段時間才能返回的內容。

事實上,documentation指出這明確:

如果超時期滿可以返回的資源之前,引發WebException。

+0

感謝那正是我所尋找的我並不完全確定。 – Prix 2011-03-08 12:13:09

0

您應該使用HTTPWebResponse。它有一個狀態代碼,告訴你這些信息等等。 HTTPWebResponse是WebResponse的後代。

2

你的HttpWebRequest.GetResponse調用時會拋出一個WebException;

Abort was previously called.  
-or-  
The time-out period for the request expired. 
-or-  
An error occurred while processing the request. 

趕上這個例外。

我以前只是拉出我的網線來測試這種事情,雖然你可能會更優雅,並使用代理工具並阻止該特定請求。

+0

謝謝,'這個請求的超時期限已經過期了,''有幫助。 – Prix 2011-03-08 12:11:50