我正在努力让Quartz.net调度程序工作,但我不知道为什么它不会解雇未来日期安排的工作。我已经测试了一个cron触发器,它每分钟触发一次,它可以工作(工作和所有),所以我知道我的工作代码不是问题。
我尝试过的事情:
我在共享托管环境中运行此程序(不确定这是否会对它产生任何影响)。我的猜测(这只是一个猜测)是垃圾收集的东西,但我不确定是什么和为什么。
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
// 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(Recorder));
jobDetail.JobDataMap["domain"] = "www.mydomain.com";
jobDetail.JobDataMap["userId"] = "2";
// Create trigger (everything is in UTC!!!)
CronTrigger cronTrigger = new CronTrigger("Schedule");
cronTrigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
cronTrigger.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); // run in pacific timezone
cronTrigger.CronExpressionString = "0 30 13 ? * MON-FRI *";
sched.ScheduleJob(jobDetail, cronTrigger);
}
答案 0 :(得分:2)
如果没有请求进入,IIS可以关闭ASP.NET进程,因此不会触发任何代码。
这就是为什么网络应用程序不是类似服务(始终在线)行为的良好来源的原因。
我已经在带有网页/网络服务的网络应用中看到了这一点,该服务可以从外部通过cURL
工具进行操作。
如果您对进一步调试感兴趣,请在Application_End
中添加一些通知,以确保在计时器触发预定作业之前实际关闭该进程。