5

DAL、BAL、および UI という 3 つの個別のプロジェクトが関連付けられている .NET 4 Web アプリケーションがあります。データベースとのやり取りに Entity Framework を使用しています。

一連のデータベース データを循環し、検出内容に応じてメソッドを呼び出し、データベースを更新するコードがあります。このコードを常に実行したい。同時に、バックグラウンドでコードが常に実行されている間、ユーザーがログインしてレポートなどを実行できるようにしたいと考えています。

これに対する良いアプローチは何ですか?常時実行されるコード用のサービス、別のスレッド、常時実行されるコード用の完全に別のプロジェクト、または別のアプローチを作成する必要がありますか?

また、与えられた回答に応じて、常に実行されるコードを開始するにはどうすればよいでしょうか? つまり、フォームの読み込み方法だけですか、それともより良いアプローチがありますか? 私は現在、スタートボタンをクリックしてコードを開始しています。これはテストでは問題ありませんが、本番環境では機能しません。

4

4 に答える 4

5

常に実行するタスクにWindows サービスを使用するのに最適です。

IIS の下で別のスレッドでコードを実行することは信頼できるメカニズムではありません。IIS はサーバー リソースを節約するためにスレッドを自由に終了できるからです。

于 2012-08-13T14:47:46.467 に答える
2

あなたの質問と他の答えに関する説明を考えると:

  1. ソリューションは、サービスをインストールできないホスト環境で実行されます。
  2. 3番目のサーバー(つまり、Azureなど)から呼び出すことはできません。

データベースの作業を管理するには、Application_Startイベントでスレッドを開始するのが最善の場合があります。ホストされている環境を過度に占有しないように、またアプリケーションの終了時または再起動時にスレッドがシャットダウンされるように、このスレッドに定期的なアイドル時間が含まれていることを確認することをお勧めします。

サービスは本当に最適ですが、ホストされた環境にいて、別のサーバーを使用できない/使用できない場合、それは不可能です。

于 2012-08-13T18:28:02.500 に答える
0

Windowsサービスを使用します。また、言及したデータベースの相互作用にストアドプロシージャを使用することも検討する必要があります。Windowsサービスを開始するという点では、自動起動(OSの起動時)に設定できます。これは、終了するまで実行されることを意味します。

于 2012-08-13T14:50:44.277 に答える
0

文字通り常に実行されている場合にのみ、Windows サービスをお勧めします。ただし、「常に」は通常、x 秒 / 分 / 時間 / 日ごとを意味します。

x が数分を超える場合は、それをコンソール アプリケーションにして、Windows タスク スケジューラを介して実行します。これにより、メモリ リークやその他の多くの問題について心配する必要がなくなります。

ただし、データベースでのみ動作する場合は、ストアド プロシージャと SQL ジョブをお勧めします。

于 2012-08-13T15:02:12.467 に答える