5

ClientHttp スタックを使用して、バイナリ ストリームを提供する WebRequest を作成する Silverlight 4 アプリケーションがあります。次に、このストリームから読み取り、何かを行います。ただし、次の問題があります。サーバーは送信するデータをバッファリングするため、送信プロセスは send-pause-send-pause-send のようになります...

サーバーの一時停止が少し長く (約 20 秒) かかる場合があり、その時点で接続が切断されたように見えます。Silverlight では例外は発生しません。実際には、Web 応答ストリームからの読み取りが正常に終了した (つまり、データがなくなった) ように見えるコードです。ただし、サーバーは実際にはすべてのデータを送信しませんでした (一時停止後にさらにデータを取得する Silverlight 以外のアプリケーションからテストできます)。これは何らかのタイムアウトの問題である可能性があると考えています (これについて読んだところ、Silverlight で明示的に設定することはできません) が、タイムアウトを示す例外が発生しないのは奇妙です。また、一時停止はそれほど長くはありません.20秒が妥当な時間だと思います.

TCP トラフィックも調べたところ、一時停止した後、Silverlight が FIN メッセージをサーバーに送信しているように見えます。そのため、タイムアウトして接続を切断することを決定したように見えますが、実際にはタイムアウトを例外として報告したり、それを回避する方法を提供したりしません。

実際に何が起こっているのか、どうすればそれを防ぐことができますか?

ありがとう!

更新: 問題が見つかりました。システム全体の Web 要求のタイムアウト動作を制御するレジストリ キーがあり、一部のアプリはそれを 10 秒に設定し (Install Anywhere など)、それを元に戻すことを「忘れて」しまいます。キーはこれです: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ReceiveTimeout

より大きな値に戻したところ、正常に動作するようになりました! H番目。

4

1 に答える 1

0

OPを引用するだけで、答えを提供します:

更新: 問題が見つかりました。システム全体の Web 要求のタイムアウト動作を制御するレジストリ キーがあり、一部のアプリはそれを 10 秒に設定し (例: Install Anywhere)、元に戻すことを「忘れて」しまいます。キーはこれです: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ReceiveTimeout

より大きな値に戻したところ、正常に動作するようになりました! H番目。

于 2012-01-24T18:24:06.093 に答える