2009-03-25 3 views
2

Я использую Quartz.NET в своем веб-приложении ASP.NET. я поставил следующий код в обработчик нажатия кнопки, чтобы убедиться, что он выполняет (для целей тестирования):Quartz.NET триггер не срабатывает

Quartz.ISchedulerFactory factory = new Quartz.Impl.StdSchedulerFactory(); 
Quartz.IScheduler scheduler = factory.GetScheduler(); 
Quartz.JobDetail job = new Quartz.JobDetail("job", null, typeof(BackupJob)); 
Quartz.Trigger trigger = Quartz.TriggerUtils.MakeDailyTrigger(8, 30); // i edit this each time before compilation (for testing purposes) 
trigger.StartTimeUtc = Quartz.TriggerUtils.GetEvenSecondDate(DateTime.UtcNow); 
trigger.Name = "trigger"; 
scheduler.ScheduleJob(job, trigger); 
scheduler.Start(); 

здесь «BackupJob»:

public class BackupJob : IJob 
{ 
    public BackupJob() 
    { 
    } 

    public void Execute(JobExecutionContext context) 
    { 
     NSG.BackupJobStart(); 
    } 
} 

мой вопрос: почему «BackupJobStart() «Не стрелять? Я использовал аналогичный код раньше, и он работал нормально.

EDIT: @ Andy White, я бы получил его в Application_Start в Global.asax. это не работает, поэтому я переместил его в обработчик нажатия кнопки, чтобы сузить проблему.

ответ

4

У вас есть запись в Quartz.NET? У меня когда-то была проблема с невыполнением задания (я забыл, почему), но как только я запустил ведение журнала Quartz.NET, проблема была очевидна.

Это стоит попробовать (если вы еще не делаете это):

Обновления: Просто добавьте это к вашему Program.cs для ведения ведомости протоколов:

Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info}; 
+0

Это помогло мне найти проблему, мое в том, что класс моя работа выполнял не имеет значения по умолчанию (без параметров) открытый конструктор. – patrickbadley

1

Другая возможность заключается в том, как вы запускаете планировщик. Я не совсем уверен, но у вас могут возникнуть проблемы с попыткой запуска потоков планирования в приложении ASP.NET. Помещение объектов SchedulerFactory/Scheduler в обработчик нажатия кнопки не похоже, что это даст вам желаемые результаты.

Возможно, вам потребуется создать планировщик на более «глобальном» уровне, чтобы он мог работать в «фоновом режиме» приложения. Также может иметь смысл перемещать любую запланированную работу в отдельную службу Windows, чтобы вам не приходилось поддерживать планировщик в веб-приложении.

Когда вы имели успех в прошлом, как вы вызывали планировщик?

3

Возможно, это проблема времени.

У меня была такая же проблема, как и вы, и я живу в стране, время которой равно UTC + 2. Итак, когда я установил StartTimeUtc в триггер, я использовал DateTime.Now, поэтому триггер не должны стрелять до двух часов спустя, и я думал, что его нужно уволить в тот самый момент, когда мой код начался.

Посмотрите внимательно на время выполнения триггера и его StartTime

+0

Спасибо большое! В этом была проблема с настройкой MY Quartz. Я просто сделал что-то вроде: DateTime.Now.ToUniversalTime(), и он отлично работает. – Timotei

Смежные вопросы