.NET 4.5 Quartz作业不会解雇Global.asax.cs Application_Start

时间:2015-05-14 18:38:31

标签: c# .net-4.5 quartz.net

我一直在努力让Quartz.net的工作在我的应用程序中解雇,但我没有运气。我在Visual Studio 2013中编写了一个测试应用程序,使用main方法可以正常工作,但这不是在实际应用程序中触发。

从我读过的内容来看,如果我想在应用程序池启动时运行某些东西,我需要将一个Global.asax.cs文件放在App_Code文件夹中(注意我不使用MVC)。然后应该有一个方法 Application_Start 来初始化Quartz作业。

所以我将以下内容放入 Global.asax.cs

public class Global
{
    protected void Application_Start(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.Write("Hello via Debug!");
        // construct a scheduler factory
        ISchedulerFactory schedFact = new Quartz.Impl.StdSchedulerFactory();

        // get a scheduler
        IScheduler sched = schedFact.GetScheduler();
        sched.Start();

        // define the job and tie it to our HelloJob class
        IJobDetail job = JobBuilder.Create<MyJob>()
            .WithIdentity("myJob", "group1")
            .Build();

        // Trigger the job to run now, and then every 40 seconds
        ITrigger trigger = TriggerBuilder.Create()
          .WithIdentity("myTrigger", "group1")
          .StartNow()
          .WithSimpleSchedule(x => x
              .WithIntervalInSeconds(5)
              .RepeatForever())
          .Build();

        sched.ScheduleJob(job, trigger);
    }
}

我在另一个班级有工作(再次,在标准的.net控制台应用程序中工作得很好)。

    public void Execute(IJobExecutionContext context)
    {
        log.Info("\n--------------------MyJob Executing via Quartz--------------------");
        log.Info("every 5 sec.");

    }

但是,我没有得到任何输出到日志。有人会介意我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

  

根据我的阅读,如果我想在应用程序池启动时运行某些东西,我需要将一个Global.asax.cs文件放在App_Code文件夹中

这是不正确的。

您将global.asax文件添加到项目中,后面有一个global.asax.cs代码。您可以通过添加新项目对话框执行此操作。

假设这是某种类型的网络应用程序,您的描述或标签并不清楚......