2011-12-06 11 views
8

私はバックエンドワーカースレッドを実行する必要がある.NET 4アプリケーションを開発しています。このスレッドは、主に次のコードで構成されています。ASP.NETで長時間実行されるバックグラウンドプロセス - Application_Startまたは別のプロセス?

while (true) { 
    //Check stuff in database 
    //Do stuff 
    //write to database/filesystem 
    Thread.sleep(60000) 
} 

ASP.NETアプリケーションは、データベースのフロントエンドに過ぎません。

私の質問は、このワーカーループを置くのに最適な場所です。 (1)Application_Startメソッドからそれを回転させて、それを実行させる、または(2)それを別のプロセス(Windowsサービス?)にバンドルする(Windowsサービス?)

IISがそれを殺す可能性があるので、実行中であることを確認するためにASP.NETコードにいくつかのロジックが必要です。また、アプリケーションロジック全体が1つの簡単に配置可能なパッケージに入っているという点でも非常にきれいです。 (2)ははるかに分離されていますが、より扱いにくいと感じています。

どのような方法が最適ですか?

+0

[ASP.NETと長時間実行されるバックグラウンドスレッド - それらはどのようにミックスされますか?](http://stackoverflow.com/questions/323693/asp-net-and-long-running-background-threads-how -do-they-mix) – jrummell

答えて

13

可能であれば、Windowsサービスを強く選択します。 ASP.NETのバックグラウンドスレッディングcomes with a lot of baggage

  1. あなたのバックグラウンドプロセスの有効期間は、IISの助けを借りて行われます。 IISがアプリケーションプールをリサイクルする時間を決定すると、バックグラウンドプロセスが再開します。 IISが非アクティブなためにアプリケーションプールを停止することを決定した場合、バックグラウンドプロセスは実行されません。
  2. IISがWeb Garden(AppPoolごとに複数のプロセス)として動作するように設定されている場合、バックグラウンドスレッドは複数回実行される可能性があります。
  3. その後、Webサイト(サイトを実行している複数のサーバー)の負荷を分散することにした場合、アプリケーションを変更して、バックグラウンドスレッドが1台のサーバーでのみ発生するようにする必要があります。

さらに多くの。

+0

[荷物]は、[Hangfire](http://hangfire.io/)のようなツールを使って処理されています。 [これらの点を考慮](http://stackoverflow.com/a/41734936/56145)。 –

関連する問題