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

时间:2012-05-21 20:17:37

标签: c# httpwebrequest connection request

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

3 个答案:

答案 0 :(得分:1)

这取决于具体情况。

一般来说,您需要为两种情况做好准备(即时和晚期中断)。 例如,如果服务器断开连接,您就会相对快速地知道。

请参阅http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus了解可能发生的错误类型(WebRequest类会因错误而抛出WebException

您有多种选择:

  • 使用异步方法(BeginGet...EndGet...)并围绕此建模您的应用程序。基本上,如果成功或错误,您将“在某个时候”收到通知。在此期间做其他事情
  • 如果您想要绝对控制,您可以在获取的流上指定ReadTimeout(请参阅对其他答案的评论,同时在请求上设置Timeout)。重试或其他什么。
  • 等一下

答案 1 :(得分:0)

如果请求被中断,您不必担心。

您可以按如下方式指定显式超时。 如果它被打断你会得到例外。

     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();
     }

答案 2 :(得分:-1)

很可能你必须等待超时