我试图通过嵌入我的.Net MVC2应用程序来使Quartz.net工作。我知道这不是理想的,但我只是想把它运行起来然后再转移到服务中。我无法解雇我的工作,但我认为我配置正确。在我的Global.asax.cs中:
protected void Application_Start()
{
Quartz.IScheduler scheduler = BuildQuartzScheduler();
...
}
这个方法直接来自教程:
private IScheduler BuildQuartzScheduler()
{
// 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(QuartzController));
// fire every hour
Trigger trigger = TriggerUtils.MakeMinutelyTrigger();
// start on the next even hour
trigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow);
trigger.Name = "myTrigger";
sched.ScheduleJob(jobDetail, trigger);
return sched;
}
和“控制器:”
public class QuartzController : IJob
{
public QuartzController() {
}
public void Execute(JobExecutionContext context) {
throw new NotImplementedException();
}
}
什么都没有被解雇。这是怎么回事?我确定必须有一个简单的语法错误,但这让我发疯了!
答案 0 :(得分:6)
如果Application_Start
看起来像那样,那么我认为一旦该方法完成执行,你的scheduler
变量很可能被垃圾收集。
我将scheduler
的引用存储为HttpApplication
类中的静态变量。这样,引用会在进程持续时间内挂起。一个猜测,但值得一试。