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 つのシナリオを使用してこれをテストしたところ、すべて同じ動作でした。
- 電話機から PC への USB 接続の使用
- PC の USB 接続を使用してインターネットに接続された電話機
- streamReader.Read() 呼び出しが数回成功した後、PC ネットワーク カードを無効にします。
- WIFI接続の使用
- WIFI接続を使用してインターネットに接続された電話
- いくつかの streamReader.Read() 呼び出しが成功した後、WIFI ルーターの電源をオフにします
- WIFI接続の使用
- WIFI接続を使用してインターネットに接続された電話
- streamReader.Read() の呼び出しが数回成功した後、WAN ケーブルを取り外します (そのため、インターネットにアクセスできません)。
ありがとうございました!ミハイ