Jeff は以前、キャッシュを使用して彼の Web サイトで「帯域外」処理を実行することについてブログに書いていますが、この種のタスクを処理するために人々が他にどのような手法を使用しているのでしょうか?
9 に答える
何年も前に、Rob Howard が HttpModule を使用してバックグラウンドでタスクを処理する方法について説明しているのを見ました。キャッシュを使用するほど滑らかではないように見えますが、特定の状況では優れている場合があります。
詳細はこのブログ投稿に記載されていますが、見回すと同じ情報を捉えている他の多くの投稿があります。
Windows サービス
DotNetNukeがどのようにそれを行うかを確認することをお勧めします。VB.NET で書かれていることは知っていますが、コードを C# に改造しました。ソースを熟読していたところ、スケジュールされたタスクをセットアップする機能が管理エリアにあることに気付きました。これらのタスクは、管理インターフェイスを介してセットアップされ、データベースに保存されます。サイトが開始されると、Global.asax ファイルを介して、別のスレッドを作成してこのサービスを実行し、スケジュールされた時間にスケジュールされたタスクを実行します。正確なロジックを思い出すことはできません。かなり前のことですが、他の人が Asp.Net アプリケーションのアウト オブ バンド プロセスをどのように実行したかを示す良いリソースであることは間違いありません。この手法でもロジックは Asp.Net アプリケーション内に保持されますが、私の意見では帯域を使い果たします。
それが主にデータ処理タスクであり、MSSQL を使用している場合、スケジュールされた SSIS タスクはどうですか?
- http://www.codeproject.com/KB/cs/tsnewlib.aspxまたはschtasks.exeを使用してスケジュールされたタスク。
- Quartz.NET
- MSMQ
- SQL Serverジョブ
- Windows サービス
- System.Threading.TimerまたはSystem.Timers.Timer
- System.ComponentModel.BackgroundWorker
- 非同期呼び出しとコールバック
個別のエージェントを伴う単純なキュー ファイル。アウト オブ バンド プロセスの種類ごとに、指定されたプロセスを実行するために必要なデータを含むキュー ファイルのディレクトリを監視する個別のエージェント .exe を記述します。
これは汚いように見えるかもしれませんが、実際には多くの柔軟性が得られることがわかりました。ASP.net プロセス空間で多くの処理を行っているわけではありません。より多くの RAM/CPU/ディスクが必要になった場合に備えて、Mono でエージェント プロセスを実行します。
asp.net ページに慣れている場合は、ジョブを処理する小さなアプリを作成してから、Web サイトを監視する外部サービスを使用してアプリに "ping" を実行できます。これにより、アプリは存続します。
スケジュールされたタスク、または cron ジョブ。
スケジュールされたタスクまたは cron ジョブの問題は、それらが Web サーバーとメモリ スペースを共有しないことです。Web サーバーからページを要求するスケジュールされたタスクをセットアップできますが、実行時間の長いタスクで問題が発生する可能性があります。実際の ASP.Net アプリケーション スタックでいくつかの優先度の低いスレッドを実行して、キャッシュのクリーンアップ、リソースの監視、一般的なハウスキーピングの処理などの単純なユーティリティ タスクを実行すると便利です。