Quartz.NET триггер не стреляет - PullRequest
3 голосов
/ 25 марта 2009

Я использую Quartz.NET в моем веб-приложении ASP.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 ()» не запускается? Я использовал подобный код раньше, и он работал нормально.

РЕДАКТИРОВАТЬ: @Анди Уайт, я бы его в Application_Start в Global.asax. это не работает, поэтому я переместил его в обработчик нажатия кнопки, чтобы сузить проблему.

Ответы [ 4 ]

5 голосов
/ 25 марта 2009

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

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

Обновление: просто добавьте это в ваш program.cs, чтобы включить ведение журнала консоли:

Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info};
3 голосов
/ 31 марта 2010

Может быть, это проблема времени.

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

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

1 голос
/ 25 марта 2009

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

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

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

0 голосов
/ 12 сентября 2018

В моем случае была проблема с IoC - были некоторые интерфейсы, которые не были реализованы. Я мог видеть, что случилось с моим, добавив логирование:

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

до Program.cs в соответствии с предложением Энди Уайта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...