1

次のサンプルに従って、ASP.NET 4.5 で非常に単純なコメットを作成しています。Ajax 呼び出しの進行状況を表示する最良の方法は何ですか?

http://www.aaronlerch.com/blog/2007/07/08/creating-comet-applications-with-aspnet/からサンプルもダウンロードしました。サーバーからの応答がありません。

Response.Flush は ASP.NET 4.5 で変更されていますか?

更新: Thread.Sleep を削除するだけで、すべてが機能するようになりました。

4

1 に答える 1

0

非同期的に応答をフラッシュするだけを追加するだけで、根本的な変更はないと思います

応答の非同期フラッシュ

HTTP クライアントへの応答の送信には、クライアントが遠くにある場合や接続の帯域幅が狭い場合、かなりの時間がかかることがあります。通常、ASP.NET は、アプリケーションによって作成された応答バイトをバッファーします。次に、ASP.NET は、要求処理の最後に、蓄積されたバッファーの単一の送信操作を実行します。

バッファーされた応答が大きい場合 (たとえば、大きなファイルをクライアントにストリーミングする場合)、定期的に HttpResponse.Flush を呼び出して、バッファーされた出力をクライアントに送信し、メモリ使用量を制御する必要があります。ただし、Flush は同期呼び出しであるため、Flush を繰り返し呼び出すと、長時間実行される可能性のある要求の間、スレッドが消費されます。

ASP.NET 4.5 では、HttpResponse クラスの BeginFlush メソッドと EndFlush メソッドを使用して非同期的にフラッシュを実行するためのサポートが追加されています。これらのメソッドを使用すると、オペレーティング システムのスレッドを拘束することなく、データを段階的にクライアントに送信する非同期モジュールと非同期ハンドラーを作成できます。BeginFlush 呼び出しと EndFlush 呼び出しの間に、ASP.NET は現在のスレッドを解放します。これにより、長時間実行される HTTP ダウンロードをサポートするために必要なアクティブ スレッドの総数が大幅に減少します。

于 2013-03-04T08:00:57.627 に答える