Web请求超时处理?

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
}

在上面的例子中,我定义了一个超时时间,如果超时了,我怎么知道,结果会是空的?
我能收到任何响应类型吗?
我如何确保我已经超时了?
3个回答

10
GetResponse() 会抛出一个 WebException。如果将超时时间设置为1毫秒并尝试访问需要很长时间才能返回的内容,就可以很容易地测试发生了什么。
实际上,文档明确指出:

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


谢谢,这正是我在寻找的,我并不完全确定。 - Prix

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.

捕获这个异常。

我过去常常只是拔掉我的网络电缆来测试这种情况,虽然你可以更加优雅地使用代理工具并阻止特定的请求。


谢谢,请求的超时时间已过期。 这很有帮助。 - Prix

0

你应该使用HTTPWebResponse。它有一个状态码,告诉你更多的信息。HTTPWebResponse是WebResponse的后代。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接