ログは、無作為な間隔でQuartz.NETジョブを停止させているThreadAbortException
を報告しています。私が理解するところでは、これは通常、スレッド自体が行っていること(FTPサーバーからファイルを読み込む、またはLINQ to Entitiesクエリを実行するなど)によって引き起こされるのではなく、一部の外部プロセスがスレッドに停止を指示している。さらに、ログの作成方法によって、私たちはこれらのエラーが発生したときにWebアプリケーション全体が再起動されていると考えているので、再起動プロセスがスレッドを最初に中断させる原因になっていると推測しています。ASP.NETでスレッドが停止している理由を知るにはどうすればよいですか?
私の質問は、どのようにサーバー/アプリケーションが再起動されているのかわかりますか?どこかで再起動するたびに詳細がわかるログがありますか?私が調査すべきこのようなものに共通の原因はありますか?
ご協力いただきありがとうございます。
編集
私はいくつかの同僚との議論があったが、IISが自動的に問題の一部である可能性があります非アクティブの一定期間、後にスリープ状態にアプリケーションを置くように聞こえます。いくつかの調査で、IISのワーカースレッドの「アイドルタイムアウト」設定が見つかりました。私は、アプリケーションが一定時間要求を処理しなかったときに、シャットダウンコマンドを発行すると思います。何らかの理由でQuartzがすぐにシャットダウンするのではなく、次のジョブが起動するのを待ってから、システムはそのジョブのスレッドを検出し、実行しようとしている間にジョブを停止させます。
システムをシャットダウンするときに実行中のジョブを正常に終了させ、何も実行していない場合はQuartzを実際にシャットダウンするようにする必要があると思います。誰かがこの種の問題を経験しているのでしょうか?
Response.Redirectsをコードに使用していますか? –
いいえ、これはリクエスト中に起こっていません。これは、Quartzの仕事の一環として起こっています。 – StriplingWarrior
こんにちはStriplingWarrior、 あなたと同じ問題が発生しています。 ApplicationPoolがquartzをリサイクルすると、.netジョブはThreadAbortExceptionを受け取り、2回目のリサイクル後にquartz .netジョブはもう実行されません。 問題を解決しましたか?もしそうなら、私はあなたが簡単にどのように記述できるか分かります。 ありがとうございます。 エンリケ –