Quartz.Net嵌入到Asp.NET MVC2中,不会解雇作业

时间:2010-08-22 03:26:12

标签: asp.net asp.net-mvc quartz.net

我试图通过嵌入我的.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();
        }
    }

什么都没有被解雇。这是怎么回事?我确定必须有一个简单的语法错误,但这让我发疯了!

1 个答案:

答案 0 :(得分:6)

如果Application_Start看起来像那样,那么我认为一旦该方法完成执行,你的scheduler变量很可能被垃圾收集。

我将scheduler的引用存储为HttpApplication类中的静态变量。这样,引用会在进程持续时间内挂起。一个猜测,但值得一试。