0

IIS がホストする WCF サービスがあり、処理する大量のデータを受け取ります。サービスはいくつかのワーカー スレッドを起動し、ワーカー スレッドを残してジョブを終了します (1 時間かかる場合があります)。WCF サービスが長時間アイドル状態の場合、IIS はアプリ プールをリサイクルしてワーカー スレッドを中止します。この問題は、アプリケーション プールを維持するためだけにワーカー スレッドがダミー サービスを呼び出すことで回避されています。このセットアップ全体が本当に悪い考えだと思うなら、私は完全に同意します (私のコードではありません)。だからそれについてコメントする必要はありません。

問題は、時折 ThreadAbortException が発生することです。何が/誰がスレッドの中止を開始したかに関する追加情報を取得する方法はありますか? 私たちのコードではないことはわかっています。

4

1 に答える 1

0

IIS のログから答えが得られました。私の知る限り、新しいバイナリが読み込まれると、IIS はすべてのサービス呼び出しが終了するまで待機し (新しい呼び出しが受け入れられなくなる)、アプリ プールをリサイクルします。ただし、IIs はサービスの後に実行されているバックグラウンド スレッドを認識していないため、アプリ プールを自由にリサイクルできると考えています。場合によっては、バックグラウンド スレッドがまだ実行されている間に、新しいバージョンをアップロードしています。いずれにせよ、非常に悪いアーキテクチャです。

于 2014-12-16T06:36:45.277 に答える