Web请求超时处理?

时间:2011-03-08 11:52:08

标签: c# error-handling timeout webrequest

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
}

在上面的示例中,我定义了一个超时,如果碰巧超时,我怎么知道,结果是空的?

我是否收到任何响应类型?

如何确保我超时?

3 个答案:

答案 0 :(得分:10)

GetResponse()会抛出WebException。测试完全会发生什么变得很简单 - 将超时设置为1ms并尝试点击需要一段时间才能返回的任何内容。

事实上,documentation明确说明了这一点:

  

如果超时期限在可以返回资源之前到期,则抛出WebException。

答案 1 :(得分:2)

您的HttpWebRequest.GetResponse来电将在{; 3}}时抛出;

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

抓住这个例外。

我过去只是拉出我的网线来测试这种东西,虽然你可以更优雅并使用代理工具并阻止该特定请求。

答案 2 :(得分:0)

您应该使用HTTPWebResponse。它有一个状态代码,可以告诉您该信息等。 HTTPWebResponse是WebResponse的后代。