2013-03-15 1 views
2

Я использую Quartz.Net о роли работника Azure (размещенном в зоне западной Европы), и по какой-то причине мой планировщик не работает, бросая эту ошибку :Quartz.net on Azure Временной зонд ID 'Coordinated Universal Time' не найден

An error occurred while scanning for the next trigger to fire. Couldn't acquire next trigger: Couldn't retrieve trigger: The time zone ID 'Coordinated Universal Time' was not found on the local computer.

Тот же планировщик с той же конфигурацией работает при размещении на моем лазурном веб-приложении. Есть идеи ?

+0

Не уверен, но, возможно, этот вопрос связан http://stackoverflow.com/q/15430368/57428 – sharptooth

+0

Глядя ближе всех проблема связана с TimeZoneInfo. Local.Id возвращает «Скоординированное универсальное время» вместо «UTC». – user886346

+0

Причина, по которой код работал над веб-приложением (размещенным в azurewebsites), а не рабочей ролью, заключается в том, что TimeZoneInfo.Local.Id возвращает «GMT Standard Time» в веб-роли. Как веб-приложение, так и рабочие роли развертываются в центре обработки данных Azure «West Europe». – user886346

ответ

1

Я на самом деле пошел вперед и экспортировать ключ/значение для «UTC» в качестве шаблона и редактировать его, используя имя «Универсальное координированное время», которая удовлетворяет Quartz, но по-прежнему сохраняет оригинальный ключ. Тогда я просто добавил эту команду к моему deployment.cmd:

regedit /s addtutctz.reg 

Теперь, я уверен, что, даже если мой экземпляр reprovisioned или облачный сервис воссоздан, ключ реестра будет объединен автоматически.

0

Хорошо, это не лучшее решение, но я сделал, чтобы создать новую виртуальную машину на Azure, удаленно войти в виртуальную машину, развернуть моего работника и изменить ключи реестра для UTC. Я в основном изменил ключ с «UTC» на «Coordinated Universal Time», и это отсортировало мою проблему. Теперь Quartz.Net работает правильно.

0

У меня была та же проблема. Я установил его, создавая триггеры на определенном TimeZone:

private static ITrigger BuildTriggerForEveryDayAtSpecifiedTime(int hour, int minutes) 
    { 
     var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); 

     return TriggerBuilder 
         .Create() 
         .WithIdentity(string.Format("Triggers every Day at {0}:{1}", hour, minutes), "MyJobs") 
         .StartNow() 
         .WithCronSchedule(string.Format("0 {0} {1} ? * *", minutes, hour), csb => csb.InTimeZone(timeZoneInfo)) 
         .Build(); 
    }