0

ASP.NET 4 アプリケーションの IIS 7.5 内で実行されるバックグラウンド タイマー スレッドをセットアップする方法を知りたいです。このスレッドは、アプリケーションの開始時に開始する必要があり、このスレッドはデータベースを定期的にスキャンして、ビジネス ロジック レイヤーを使用して (同じ IIS サーバーでホストされている SignalR を介して) エスカレーション メールまたはアラートを送信する必要があります。

私はこのトピックについて完全に新しいものです.IISでタイマースレッドをセットアップして上記の要件を達成する方法について誰かが光を当てることができますか? ありがとう。

4

2 に答える 2

0

、上記の要件を達成するためにIISでタイマースレッドをセットアップする方法について、誰かが光を当てることができますか?

一般に、IIS アプリでこのようなことを試みることはお勧めできません。AppDomain はさまざまな理由で停止される可能性があり (非アクティブな期間の後、構成可能なスケジュールでメモリのしきい値を超えた場合)、通常は要求を受信するまで再開されません。

代わりに、Windows タスク スケジューラなど、他の方法で必要なタスクをスケジュールしてください。スケジュールされたタスクは非常に単純で、実行されていない場合に開始され、必要な作業を実行できる IIS アプリケーションに要求を送信するスクリプトにすぎません。

たとえば、次のような VBScript スクリプトをスケジュールできます。

url = ... some url in your application that sends escalation emails ...
set http = CreateObject("microsoft.xmlhttp")
http.open "GET",url,false
http.send
htmlpage = http.responsetext 
WScript.Echo htmlpage

コメントに応じて更新

IIS でのセットアップのリスク (アプリ ドメインのリサイクル) を理解していますが、クライアントの要件に従って、ウィンドウ サービス/スケジュールの使用に制限があります。IIS自体で行う技術的な詳細を探しています。

リスクを理解している場合は、global.asax の Application_Start から開始される静的なタイマーを持つことができます。タイマーが作動するたびに、自分のことをしてください。

于 2013-09-25T06:30:14.647 に答える
0

スケジューラQuartZ Schedulerの助けを借りて、Quartz Scheduler を使用してエスカレーション メールを送信できます。

// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();

// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();

// construct job info
JobDetail jobDetail = new JobDetail("myJob", null, typeof(HelloJob));
// fire every hour
Trigger trigger = TriggerUtils.MakeHourlyTrigger();
// start on the next even hour
trigger.StartTimeUtc = TriggerUtils.GetEvenHourDate(DateTime.UtcNow);  
trigger.Name = "myTrigger";
sched.ScheduleJob(jobDetail, trigger); 
于 2013-09-25T06:16:39.110 に答える