- - PR -
IISワーカープロセスリサイクルについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-01-14 18:15
初めての投稿です。
当方、サーバー開発は初めてで、プロジェクト管理する立場のため、サーバー技術情報、プログラムの細かい部分まで見れないため、間違った用語等を使っているかも知れませんがご容赦ください。 ※開発メンバーのサーバ開発スキルは高いのですが、.NETは初めてです。 あるシステムで、データファイルのコピーを行う非同期リクエストがあり、データ量増加に伴うサーバ間リクエストタイムアウトの対応が必要となり、非同期化実装の対応を行いました。 サーバ環境は、Windows Server 2003 R2 Standard Edition + IIS6 + .NET2.0 で、アプリケーションはC#言語での開発です。 処理を行うスレッドと、終了監視を行う2つのスレッドを追加、リクエスト元へは両スレッドの起動成功でレスポンスを返送、処理終了状態を問い合わせるリクエストを追加、リクエスト元で終了監視を行わせる実装としました。 ところが、処理中にワーカープロセスのリサイクルタイミングで、追加したスレッドに対して、System.Threading.ThreadAbortException がスローされ、処理が終了させられてしまいます。 chatch部で何らかの処理を行おうとしても、また例外が発生して終了させられる場合もありました。 終了されてしまう既存ワーカープロセスの動作は、この追加したスレッド処理の完了までは、保障されるとの前提で設計しておりました。 MSのサイトでは、関連の技術情報を見つけることが出来なかったのですが、この追加で起こしたスレッドへのAbortはIIS(ASP.NET)の仕様でしょうか? また、アプリケーションで考慮すべき、その他同様のAbortとなるようなシステムイベント(設定)は何かあるのでしょうか。 現状、本リクエストは、バッチ処理で決められた時間に行われるため、ワーカープロセスのリサイクルタイミングを1740分周期(Default)から、バッチ処理とバッティングしない時間への設定変更と、時間のかかるファイルコピー処理をリクエスト側のサーバーへ引っ越しすることで回避しています。 ワーカープロセスリサイクルにより、セッション切れ等の問題はないですが、他の既存不具合が見つかり、あわせて対応しました。 現状は、問題回避できているのですが、本件、あるべき設計方法や、関連技術情報へのIndex等、今後の開発のためにも知っておきたいと考えてます。 ご教授いただけたら幸いです。 | ||||||||||||
|
投稿日時: 2009-01-14 19:49
仕様と言えば仕様です。 仕組み上、そうなることを避けることはできません。
プロセスリサイクルはイベントではないですが、システムのシャットダウンでも似たような状況になるはずです。
「.NET だから」というのとはあまり関係なく、バッチ処理を Web アプリケーションで実行しないことです。 Web アプリケーションでは処理依頼を DB や MSMQ に投入するだけにして、バッチ処理は Windows サービスやタスクスケジューラを利用するなどして、別プロセスで実行するのが手堅いところでしょう。 |
1