设置在ASP.NET 4的IIS中运行的后台计时器线程

时间:2013-09-25 06:14:59

标签: asp.net-mvc iis-7

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

我在这个主题上完全是新的,有人能说明如何在IIS中设置计时器线程以满足上述要求吗?感谢。

2 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:0)

  

,任何人都可以了解如何在IIS中设置计时器线程以达到上述要求吗?

一般来说,尝试在IIS应用程序中执行此类操作并不是一个好主意。您的AppDomain可能由于多种原因而停止(在一段时间不活动后,超出内存阈值时,在可配置的时间表上),并且通常在收到请求之前不会再次启动。

相反,请使用其他方式安排您所需的任务 - 例如Windows任务计划程序。您的计划任务可能非常简单,可能只是一个向IIS应用程序发送请求的脚本,如果它没有运行就会启动,然后可以执行必要的工作。

E.g。您可以安排一个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(app域回收)中设置的风险,但是根据客户要求使用窗口服务/计划存在限制。所以我正在寻找在IIS本身完成的技术细节。

如果您了解风险,您可以简单地使用从global.asax中的Application_Start启动的静态Timer。每次计时器开火,都要做你的东西。