2

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

4

3 回答 3

1

这取决于实际情况。

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

有关可能发生的错误类型,请参见http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatusWebRequest (类在错误时抛出WebExceptions)

您有多种选择:

  • 使用异步方法 (BeginGet...EndGet...) 并围绕此为您的应用程序建模。基本上,如果成功或错误,您将在“某个时候”收到通知。期间做点别的
  • 如果您想要绝对控制,您可以ReadTimeout在获取的流上指定 a (参见其他答案的评论,也可以Timeout在请求中设置)。重试什么的。
  • 等一下
于 2012-05-21T20:35:54.280 回答
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();
     }
于 2012-05-21T20:34:36.127 回答
-1

很可能您必须等待超时

于 2012-05-21T20:24:49.530 回答