2012-05-21 105 views
2

假设我创建了HTTPWebRequest,请调用它的GetResponse()并开始从响应流中读取数据。如果从流中读取连接时中断连接,是否必须等待连接超时,或者我能否立即知道出现了问题?当我中断连接时(例如,断开我的计算机与网络的连接),不会引发异常情况。如何在C#中处理中断的HTTP连接

回答

1

这取决于具体情况。

一般而言,您需要为两种情况(即时和延迟中断)做好准备。例如,如果服务器断开你的连接,你就会比较快地知道。

http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus为各种可能出现的错误的(在WebRequest类的错误抛出WebException S)

你有多种选择:

  • 使用异步方法(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

超时不会涵盖获取响应流afaik后发生的情况。所以你仍然可以在阅读响应流的时候超时 – skarmats

+1

我正在使用这个(改变stream.ReadTimeout来代替),但显然我不能限制它太多,否则它会很容易超时。 –