2012-05-21 107 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來代替),但顯然我不能限制它太多,否則它會很容易超時。 –