我使用 Quartz lib 在我的 ASP.NET MVC 项目中按计划执行一些任务。我将我的作业初始化为 Global.asax 文件的 Application_Start 方法。但过了一段时间,Quartz 停止了,因为方法 Application_End 被执行了。
变量被声明为静态:
public static ISchedulerFactory scheduleFactory = new StdSchedulerFactory();
public static IScheduler scheduler = scheduleFactory.GetScheduler();
以下是 Quads 的 Jobs 的初始化方式:
IJobDetail jobSender = new JobDetailImpl("jobSender", "MailGroup", typeof(JobMailSender));
ITrigger triggerSender = new CronTriggerImpl("triggerSender", "SenderGroup", "jobSender", "MailGroup", "0 0/30 * * * ?");
scheduler.ScheduleJob(jobSender, triggerSender);
scheduler.Start();
我找到了它发生的原因。当所有用户的会话将不复存在并且服务器没有活动的用户会话时,方法 Application_End 将执行。
我创建了新的 Quartz 的工作,它每 15 分钟打开一次站点,结果新的用户会话将在服务器上创建。但仍会不时调用 Application_End 方法。
有没有人面临类似的问题?也许 web.config 有一些设置不会执行方法 Application_End,即使服务器上没有活动会话?