asp.net アプリケーションの「帯域外」処理技術
-
09-06-2019 - |
質問
ジェフは以前ブログでこう書いています キャッシュを使用する 彼の Web サイトで「帯域外」処理を実行するには、この種のタスクを処理するために他のどのようなテクニックを使用しているのか疑問に思いました。
解決
何年も前、私は 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サーバー 仕事
- Windowsサービス
- システム.スレッディング.タイマー または System.Timers.Timer
- System.ComponentModel.BackgroundWorker
- 非同期 コールとコールバック
スケジュールされたタスク、または cron ジョブ。
スケジュールされたタスクまたは cron ジョブの問題は、Web サーバーとメモリ領域を共有しないことです。Web サーバーからページを要求するスケジュールされたタスクを設定することもできますが、長時間実行されるタスクで問題が発生する可能性があります。キャッシュのクリーンアップやリソースの監視、一般的なハウスキーピングの処理などの単純なユーティリティ タスクを実行するために、実際の ASP.Net アプリケーション スタック上で優先度の低いスレッドをいくつか実行するとよいでしょう。
シンプルなキュー ファイルと別個のエージェント。帯域外プロセスのタイプごとに、指定されたプロセスを実行するために必要なデータを含むキュー ファイルのディレクトリを監視する個別のエージェント .exe を作成します。
これは汚いように思えるかもしれませんが、現実の世界では、これにより多くの柔軟性が得られることがわかりました。ASP.net プロセス領域で多くの処理を行う必要はなく、このスタイルを簡単に適応させて、より多くの RAM/CPU/ディスクが必要になり始めた場合に備えて、Mono 上のエージェント プロセス。
asp.net ページに最も慣れている場合は、ジョブを処理する小さなアプリを作成し、Web サイトを監視する外部サービスを使用してそのアプリに「ping」を送信することができます。これにより、アプリは存続します。