2011-08-04 80 views
3

我使用HttpWebResponse.BeginGetResponse()方法向我的服務器發出請求。請求將AllowReadStreamBuffering設置爲false以便數據不會被緩衝。在「請求完成」通知我這樣做(包括任何錯誤處理代碼)如下:BinaryReader.Read在連接丟失時不拋出IOException

HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(result); 
BinaryReader streamReader = new BinaryReader(response.GetResponseStream()); 

try 
{ 
    while ((readSize = streamReader.Read(buffer, 0, buffer.Length)) > 0) 
    { 
    ... 
    } 
} 
catch (Exception) 
{ // NEVER GET HERE!! 
... 
} 

我的問題是,(在while循環)讀取從數據流中我不能檢測連接錯誤。行爲非常奇怪:它完成讀取操作系統在緩存中的所有數據,然後返回「readSize = 0」,如「流結束」一樣。 我期待streamReader.Read()拋出一個IOException異常但它不會! 我試圖找到一個流失敗標誌的某處,但似乎沒有(流/ BinaryReader/HttpWebResponse)。請幫忙!

我用三個場景測試,這一切都得相同的行爲:

  1. 使用手機到PC的USB連接
    • 手機連接到互聯網使用PC的USB連接
    • 後幾streamReader.Read()成功呼叫我禁用PC網卡
  2. 使用WIFI連接
    • 手機採用WIFI連接
    • 幾個streamReader.Read(後)成功呼叫連接到互聯網的我WIFI路由器
  3. 斷電使用WIFI連接
    • 手機採用WIFI連接
    • 連接到互聯網
    • 經過幾次streamReader.Read()成功的呼叫,我刪除廣域網電纜(所以它沒有互聯網接入)。

謝謝! 米哈伊

+0

多大的緩衝區中讀取的字節數? –

+0

在這一刻它是16K,但這沒有關係。 – Mihai

+0

嘗試在while循環下創建自己的異常,從而更好地控制情況......這可以幫助您更深入地瞭解正在發生的事情。 – Keeano

回答

0

如果你沒有得到一個異常然後一個選項是要檢查response.ContentLength

相關問題