3

HttpWebResponse.BeginGetResponse() メソッドを使用して、サーバーにリクエストを送信します。データがバッファリングされないように、要求では AllowReadStreamBuffering がfalseに設定されています。「リクエスト完了」通知で、次のことを行います (エラー処理コードは含まれていません)。

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 ループ中) に接続エラーを検出できないことです。動作は非常に奇妙です。OS がキャッシュに保持しているすべてのデータの読み取りを終了し、「ストリームの終わり」の場合と同様に「readSize = 0」を返します。streamReader.Read() が IOException 例外をスローすることを期待していましたが、そうではありません! どこかにストリーム失敗フラグを見つけようとしましたが、ないようです (Stream/BinaryReader/HttpWebResponse)。助けてください!

3 つのシナリオを使用してこれをテストしたところ、すべて同じ動作でした。

  1. 電話機から PC への USB 接続の使用
    • PC の USB 接続を使用してインターネットに接続された電話機
    • streamReader.Read() 呼び出しが数回成功した後、PC ネットワーク カードを無効にします。
  2. WIFI接続の使用
    • WIFI接続を使用してインターネットに接続された電話
    • いくつかの streamReader.Read() 呼び出しが成功した後、WIFI ルーターの電源をオフにします
  3. WIFI接続の使用
    • WIFI接続を使用してインターネットに接続された電話
    • streamReader.Read() の呼び出しが数回成功した後、WAN ケーブルを取り外します (そのため、インターネットにアクセスできません)。

ありがとうございました!ミハイ

4

1 に答える 1

0

例外が発生しない場合の 1 つのオプションは、response.ContentLength に対して読み取られたバイト数を確認することです。

于 2011-10-14T14:24:41.367 に答える