【发布时间】:2012-05-21 20:17:36
【问题描述】:
假设我创建了一个HTTPWebRequest,调用它的GetResponse() 并开始从响应流中读取。如果在从流中读取时连接中断,我是否必须等待它超时,或者我可以立即知道出了什么问题?当我中断连接时不会抛出异常(例如,我将计算机与网络断开连接)。
【问题讨论】:
标签: c# httpwebrequest connection request
假设我创建了一个HTTPWebRequest,调用它的GetResponse() 并开始从响应流中读取。如果在从流中读取时连接中断,我是否必须等待它超时,或者我可以立即知道出了什么问题?当我中断连接时不会抛出异常(例如,我将计算机与网络断开连接)。
【问题讨论】:
标签: c# httpwebrequest connection request
视情况而定。
一般来说,您需要为这两种情况(立即中断和后期中断)做好准备。 例如,如果服务器断开了您的连接,您会相对较快地知道。
请参阅 http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus 了解可能发生的错误类型(WebRequest 类在错误时抛出 WebExceptions)
您有多种选择:
BeginGet... 和EndGet...)并以此为基础建模您的应用程序。基本上,如果成功或错误,您会“在某个时候”收到通知。在此期间做点别的事情ReadTimeout(参见其他答案的评论,同时在请求中设置Timeout)。重试什么的。【讨论】:
您不必担心请求是否被中断。
您可以如下指定显式超时。 如果它被打断,你会得到异常。
try
{
var request = HttpWebRequest.Create(url);
request.Timeout = 3000;
var response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode.Equals(HttpStatusCode.OK))
{
//do stuff
}
}
catch (Exception exception)
{
exception.ToLog();
}
【讨论】:
很可能你必须等待超时
【讨论】: