如何在 C# 中处理中断的 HTTP 连接

本文关键字:中断 HTTP 连接 处理 | 更新日期: 2023-09-27 18:34:56

假设我创建了一个HTTPWebRequest,调用它的GetResponse()并开始从响应流中读取。如果在从流读取时连接中断,我是否必须等待它超时,或者我可以立即知道出了问题?当我中断连接时不会引发异常(例如,我断开计算机与网络的连接(。

如何在 C# 中处理中断的 HTTP 连接

这取决于情况。

一般来说,您需要为这两种情况做好准备(立即中断和延迟中断(。例如,如果服务器断开了您的连接,您将相对较快地知道。

有关可能发生的错误类型,请参见 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();
     }

很可能你必须等待超时