コンテキスト: JavaScript Web UI から、.NET2.0 バックエンドで実行される長時間 (数分) の操作を起動します。呼び出しは、長時間実行オペレーションが並行して実行されている間、オペレーション ID とともにすぐに返されます。操作は CPU 集中型ではありませんが、低速のネットワーク呼び出しを実行します。操作が完了したら、Web UI で結果を確認したいと考えています。
質問:作業が完了したことをクライアントに通知するにはどうすればよいですか?
私が検討したオプション:
オプション 1 : 長期実行オペレーションを JS から直接非同期で起動し、戻り値がオペレーション ID ではなく最終結果になることを期待しています。私の AJAX ライブラリはすべてを処理し、人生はとても簡単できれいに見えます。問題は、サーバー側のスレッドが ThreadPool スレッドであり、数分間ロックすることです。十分な処理能力がある場合でも、ThreadPool が枯渇し、サーバー全体が機能しなくなる原因となる、実行時間の長い並列要求が多すぎる必要はありません。
オプション 2 : 操作 ID を使用して、操作が完了した場合にサーバーのポーリングを開始します。ただし、これは自分のサーバーに対するサービス拒否攻撃です。さらに、それに対する公正な ajax ソリューションが必要です。これは、固有の問題ではありません。