1

HttpHandlerブラウザからの切断をリッスンしますか?

動的ファイルの作成にほとんど/のみ使用されているように見えるので、私の推測では「いいえ」です。なぜそうするのでしょうか。

しかし、私はドキュメントやグーグで答えを見つけることができません。

よろしくお願いします!

バックグラウンド

HttpHandlerを「中止」したいのは、現在、大量のExcelエクスポート(〜150k sql行、つまり〜600k html行)を許可しているためです。コードとほぼ同じくらいばかげた理由で、ユーザーがエクスポートしようとするSQL行と同じ数のSQL行に対して起動するクエリがあります。ご想像のとおり、これには非常に長い時間がかかります。

ユーザーはおそらくラグに不満を感じているので、ワーカープロセスにバックアップされていると思います。そして、より小さな結果で再試行します。現在、ワーカーprocを30分ごとに自動的にフラッシュしていますが、もっと早くクリーンアップしたいと思います。

現在、SQLをクリーンアップする時間がないので、クライアントからの「中止」をリッスンし、「中止」された場合はハンドラーを強制終了したいと思います。

4

1 に答える 1

-1

クライアント接続の切断をリッスンして達成したいと思っていることは、問題の解決にはまったく役立ちません。問題の核心は、HttpHandlerで直接開始される長時間実行タスクです。

この場合、クライアントの切断をリッスンできたとしても、コードの実行がビジー状態でリッスンできないため、クライアントの切断が実行されることはありません。

このような長時間実行されているプロセス中に進行状況を適切に判断してアクションを実行する唯一の方法は、コードがマルチスレッドであることを確認することです。長時間実行されるプロセスのASP.NETでこれを行う場合の問題は、ページを提供するために必要なスレッドプールからスレッドを吸い上げることです。これにより、これまで経験してきたように、Webサイトがハングしたり、応答が非常に遅くなる可能性があります。

これらの長時間実行されるジョブを処理するWindowsサービスを作成し、結果をステージングディレクトリに吐き出すことをお勧めします。次に、 MSMQなどを使用して、処理のためにサービスにリクエストをスローします。

最終的には、ASP.NETの外部でこの長時間実行されるスレッドを取得して、マルチスレッドが提供できる利点を活用できるようにする必要があります。たとえば、進行状況を報告し、必要に応じて中止する機能。

于 2013-02-08T02:26:18.167 に答える