我试图在C#中将Quartz.NET作为Windows服务来实现。据我所知,我的工作并没有触发,实际上,我希望他们能够触发......实际上,Quartz.NET - 作业不运行?
我的“我的工作”计划在运行“分钟”后的下一分钟即开始运行。但是,当下一分钟到来时,我似乎无法分辨是否有任何实际运行。
我会假设当我的作业运行时,一个CLI窗口会在作业执行时弹出,并且控制台操作将可见,(我甚至在其中放置了一个Console.ReadKey()
以确保窗口不打开和关闭如此快速我看不到它),但据我所知,时间表根本就没有执行任务。
我注意到,所有的时间都在UTC,那StartTimeUtc
将被设置为UTC时间是从我的本地计算机时间6小时,但我也将认为Quartz调度处理,通过计算执行时间从我的TimeZone设置开始,但我无法确定这一点,或确认实际时间是否符合我的日程安排。
我想有一些方法来建立共同的测井组件,并利用它来帮助我知道我的身份是什么,但我还没有搞清楚如何处理做,以使日志任何种类的从反馈我Windows服务,除了写入我为它创建的事件日志。
我的我的Windows服务的OnStart功能
protected override void OnStart(string[] args)
{
eventLog.WriteEntry("--- STARTING eLoyalty Scheduler Service ---");
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
// construct job info
JobDetail jobDetail = new JobDetail("eLoyaltySchedulerService", null, typeof(PortalSchedulerJob));
jobDetail.JobDataMap["jobSays"] = "eLoyalty Scheduler Service Executing!";
jobDetail.JobDataMap["myStateData"] = new ArrayList();
// fire every minute
Trigger trigger = TriggerUtils.MakeMinutelyTrigger();
// start on the next even minute
trigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow);
// name it
trigger.Name = "NextEvenMinute";
// schedule it
sched.ScheduleJob(jobDetail, trigger);
// start the schedule
sched.Start();
eventLog.WriteEntry("--- STARTED eLoyalty Scheduler Service ---");
}
我的工作的execute()函数如下:
public void Execute(JobExecutionContext context)
{
try
{
string instName = context.JobDetail.Name;
string instGroup = context.JobDetail.Group;
JobDataMap dataMap = context.MergedJobDataMap;
string jobSays = dataMap.GetString("jobSays");
ArrayList state = (ArrayList)dataMap["myStateData"];
state.Add(DateTime.UtcNow);
Console.WriteLine("Instance {0} of PortalSchedulerJob says: {1} @ {2}", instName, jobSays, DateTime.UtcNow);
Console.ReadKey();
}
catch (JobExecutionException Ex)
{
throw Ex;
}
}
如果你能帮助我弄清楚如何解决我的实际计划活动,我可以自己解决这个问题......?
这是有帮助的,但不是这个特定问题的答案! :) – Rimer 2010-12-09 05:42:01
非常真实。被抓到异常处理的东西,我甚至没有注意到你使用控制台 - 这肯定不会在Windows服务中工作! – 2010-12-09 06:33:49
@keith - Windows服务可以输出到控制台。您需要为此启用交互式访问。 – Matt 2015-07-05 02:00:40