2009-07-18 18 views
2

重複
これはDealing with a longer running process in WCFの近くにあります。この代わりにあなたの答えを投稿することを検討してください。ASP.NET + WCFの長時間実行スレッドプロセス

元の質問
私が予定した時間にいくつかのバックグラウンド・プロセスを実行する必要があり、アプリケーションのビジネス層を実装しています。ビジネスレイヤーは、すべて同じWebアプリケーションで実行される複数のWCFサービスで構成されています。

このアイデアは、異なる時間(例えば、5分ごと、毎日23:00など)で実行されなければならない一連の「タスク」を定義しています。それはWindowsサービスとして実装するのが難しくないかもしれませんが、問題はタスクがサービスに存在するデータキャッシュにアクセスする必要があるためです。この 'スケジューラ'はIISコンテキストで実行してそのデータにアクセスする必要があります。

私が現在行っているのは、カスタムスレッドを生成して返すWCFサービスの1つでカスタムServiceHostFactoryを使用していることです。子スレッドは、X分ごとにスリープして起動し、スケジュールされたタスクがあるかどうかを確認して実行します。 しかし、アプリケーションプールをリサイクルするときや、非アクティブな時間が経過したときにIISがスレッドを無作為に殺すのではないかと心配しています(プレゼンテーションレイヤーからの要求をリッスンするWCFサービスのアクティビティがないなど)。スレッドは、サービス上のアクティビティに関係なく中断なく実行されなければなりません。これは本当に可能ですか?

私はan article by someone doing the same thingが見つかりましたが、彼のソリューションは、子スレッド自体から定期的にサーバーにpingしているようです。うまくいけば、より良い解決策があります。

+0

これはhttp://stackoverflow.com/questions/1142698/dealing-with-a-longer-running-process-in-wcfの非常に近い複製です。それを見て、あなたが私に同意するかどうか見てください。 –

答えて

1

私はいつもウェブページをロードするWindowsサービスを実装しています。その目的は、サイトがWorkflow Foundationランタイムをホストしていて、IISがアプリケーションプールをリサイクルした後にWebアプリケーションが確実にバックアップされるようにすることでした。おそらく同じアプローチをこのケースで使用することができます。 x分ごとに実行され、タスクをチェックするページをロードするサービス(Windowsではスケジュールされたタスク、さらに単純なタスク)があります。

1

Windowsサービスを実行するか、Windowsスケジューラのアプリケーションを配置して、特定の時刻にWCFでメソッドを実行することはできますか? WCFの内部でBackgroundWorkerを使用している可能性があります。別のオプションは、WCFがビジネスロジックを実行したり、適切なデータを渡したり、メモリ内のデータへのポインタ(安全でないもの)を渡すために他のアプリケーションを生成することです。

関連する問題