我一直在努力让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.");
}
但是,我没有得到任何输出到日志。有人会介意我在这里做错了吗?
答案 0 :(得分:1)
根据我的阅读,如果我想在应用程序池启动时运行某些东西,我需要将一个Global.asax.cs文件放在App_Code文件夹中
这是不正确的。
您将global.asax文件添加到项目中,后面有一个global.asax.cs代码。您可以通过添加新项目对话框执行此操作。
假设这是某种类型的网络应用程序,您的描述或标签并不清楚......