- PR -

IISワーカープロセスリサイクルについて

1
投稿者投稿内容
未記入
会議室デビュー日: 2009/01/14
投稿数: 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等、今後の開発のためにも知っておきたいと考えてます。
ご教授いただけたら幸いです。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2009-01-14 19:49
引用:

この追加で起こしたスレッドへのAbortはIIS(ASP.NET)の仕様でしょうか?



仕様と言えば仕様です。
仕組み上、そうなることを避けることはできません。

引用:

また、アプリケーションで考慮すべき、その他同様のAbortとなるようなシステムイベント(設定)は何かあるのでしょうか。



プロセスリサイクルはイベントではないですが、システムのシャットダウンでも似たような状況になるはずです。

引用:

あるべき設計方法



「.NET だから」というのとはあまり関係なく、バッチ処理を Web アプリケーションで実行しないことです。

Web アプリケーションでは処理依頼を DB や MSMQ に投入するだけにして、バッチ処理は Windows サービスやタスクスケジューラを利用するなどして、別プロセスで実行するのが手堅いところでしょう。
1

スキルアップ/キャリアアップ(JOB@IT)