0

我想知道如何设置在 ASP.NET 4 应用程序的 IIS 7.5 中运行的后台计时器线程。此线程应在应用程序启动时启动,并且此线程应使用业务逻辑层定期扫描数据库以发送升级电子邮件或警报(通过托管在同一 IIS 服务器中的 SignalR)。

我对这个主题完全陌生,任何人都可以了解如何在 IIS 中设置计时器线程以达到上述要求吗?谢谢。

4

2 回答 2

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 回答
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 回答