Я пытаюсь реализовать Quartz.NET как службу Windows в C #. Мои работы не запускаются, когда я ожидаю, что они сработают ... вообще, насколько я могу судить?
У меня есть расписание My Job, которое запускается на следующую четную минуту после и запускается "поминутно". Однако, когда наступает следующая минута, я не могу сказать, работает ли что-нибудь на самом деле.
Я бы предположил, что при выполнении моей работы окно CLI будет отображаться при выполнении задания, и будут видны операции консоли (я даже добавил туда Console.ReadKey()
, чтобы окно не открывалось и не закрывалось, поэтому быстро, я не могу видеть это), но, насколько я могу судить, график просто не выполняет задания.
Я заметил, что все время в UTC, и что StartTimeUtc
будет установлено время UTC, которое составляет +6 часов от моего локального времени компьютера, но я также предположил бы, что планировщик кварца обрабатывает это, вычисляя время выполнения из моей настройки TimeZone, хотя у меня нет способа подтвердить это или подтвердить фактическое время, для которого установлено мое расписание.
Я предполагаю, что есть какой-то способ настроить сборку Common Logging и использовать ее, чтобы помочь мне узнать, каков мой статус, но мне еще предстоит выяснить, что с этим делать, чтобы включить какой-либо журнал для обратной связи с моей Windows Сервис, кроме записи в журнал событий, который я для него создал.
Моя функция OnStart моей службы Windows
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;
}
}
Если вы можете помочь мне выяснить, как устранить неполадки в моем действительном расписании, я могу решить это самостоятельно ...?