5

HttpWebResponse を介してインターネット経由でアプリケーションにダウンロードしようとするデータの処理に大きな問題があります。私のコードは次のようになります。

myWebRequest.Timeout = 10000; 

using (HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse())
{
     using (Stream ReceiveStream = myWebResponse.GetResponseStream())
     {
         Encoding encode = Encoding.GetEncoding("utf-8");
         StreamReader readStream = new StreamReader(ReceiveStream, encode);
         // Read 1024 characters at a time.
         Char[] read = new Char[1024];

         int count = readStream.Read(read, 0, 1024);

         int break_counter = 0;
         while (count > 0 && break_counter < 10000)
         {
             String str = new String(read, 0, count);
             buffer += str;
             count = readStream.Read(read, 0, 1024);
             break_counter++;
         }
    }
}

このコードは、別々のスレッドでいくつかのインスタンスで実行されるため、デバッグが少し難しくなります。問題は、このメソッドが動かなくなったことです。データへの接続が悪いことが原因だと思います。

ご覧のとおり、既にタイムアウトを設定しており、タイムアウト時間が経過した後にコードが終了することを望んでいました。そうではありません!少なくとも常にではありません。WebException/Timeout が発生することもありますが、スタックすることも数回あります。

タイムアウトとは正確には何ですか?いつ呼ばれますか?HttpWebResponse がデータの受信を開始したが、送信の途中でスタックしたとします。タイムアウトは発生しますか? 私にとっては、アプリケーションもスタックし、タイムアウト例外が発生しないため、そうではないようです。

これにパッチを当てるにはどうすればよいですか、またはここで何が問題になっているのかについてさらに情報を得るにはどうすればよいですか?

4

1 に答える 1

15

HttpWebRequest.ReadWriteTimeout プロパティを設定してみてください

書き込みまたは読み取りがタイムアウトするまでのミリ秒数。デフォルト値は 300,000 ミリ秒 (5 分) です。

于 2010-03-17T13:10:38.850 に答える