我正在开发适用于我的开发机器的Windows服务,但是当我部署到测试服务器时,我发现我设置的Quartz Scheduler不起作用。 没有异常抛出或任何线索,为什么会这样。 这是我的代码;
protected override void OnStart(string[] args)
{
try
{
this.SetDailySchedule();
}
catch (SchedulerException ex)
{
this.eventLog.WriteEntry("WMS FM Loader: Schedule Error - " + ex.Message);
throw ex;
}
catch (Exception ex)
{
this.eventLog.WriteEntry("WMS FM Loader: Unexpected Error - " + ex.Message);
throw ex;
}
}
private void SetDailySchedule()
{
this.eventLog.WriteEntry("On Start".Log());
var schedule = this.GetSchedule();
try
{
this.schedFact = new StdSchedulerFactory();
this.sched = this.schedFact.GetScheduler();
}
catch (Exception ex)
{
this.eventLog.WriteEntry(ex.Message.Log());
throw;
}
this.eventLog.WriteEntry(string.Format("Got a scheduler: {0}", schedule).Log());
try
{
ScheduleTheLoad(schedule);
}
catch (Exception ex)
{
this.eventLog.WriteEntry(ex.Message.Log());
throw;
}
this.eventLog.WriteEntry("WMS FM Loader: Scheduler ready");
}
private void ScheduleTheLoad(string schedule)
{
var job = JobBuilder.Create<LoadWorksOrders>().WithIdentity("LoadWorksOrdersJob").Build();
// Trigger the job to run now, and then every day
var trigger =
TriggerBuilder.Create()
.ForJob(job)
.WithIdentity("LoadWorksOrdersTrigger")
.StartNow()
.WithCronSchedule(schedule)
.Build();
this.sched.ScheduleJob(job, trigger);
this.sched.Start();
}
我手动启动服务,事件日志显示调度程序已准备就绪,但LoadWorksOrdersJob doe snot get run。 我该如何解决这个问题?
答案 0 :(得分:3)
您是否在Windows服务OnStart中运行这两种方法?您使用的是服务帐户吗?事件查看器中的任何异常/您是否已从services.msc启动/停止服务?
答案 1 :(得分:0)
我也有这个问题。我花了一天时间来解决这个问题。
对我而言,我的集会名称中有点/句点。 e.g。
Project.UpdateService
当我把它改为......时,
ProjectUpdateService
......它运作良好。它始终适用于开发机器。它只是在远程机器上不起作用。
更新:可能是导致此问题的服务长度。通过删除点我缩短了服务名称。看起来最大长度为25个字符。