如何在 C# 中处理中断的 HTTP 连接
本文关键字:中断 HTTP 连接 处理 | 更新日期: 2023-09-27 18:34:56
假设我创建了一个HTTPWebRequest
,调用它的GetResponse()
并开始从响应流中读取。如果在从流读取时连接中断,我是否必须等待它超时,或者我可以立即知道出了问题?当我中断连接时不会引发异常(例如,我断开计算机与网络的连接(。
这取决于情况。
一般来说,您需要为这两种情况做好准备(立即中断和延迟中断(。例如,如果服务器断开了您的连接,您将相对较快地知道。
有关可能发生的错误类型,请参见 http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus(WebRequest
类在错误时抛出WebException
s(
您有多种选择:
- 使用异步方法(
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();
}
很可能你必须等待超时