Azure上的Quartz.net未找到时区ID“协调世界时”

时间:2013-03-15 10:51:40

标签: azure timezone utc quartz.net azure-worker-roles

我在Azure工作者角色(托管在西欧区域)使用Quartz.Net,由于某种原因,我的调度程序无法正常工作抛出此错误:

  

扫描下一个触发触发器时发生错误。   无法获取下一个触发器:无法检索触发器:时间   在本地找不到区域ID“协调世界时”   计算机。

在我的azure网站应用程序中托管时,具有相同配置的相同调度程序正在运行。任何的想法 ?

3 个答案:

答案 0 :(得分:1)

我实际上已经将“UTC”的键/值导出为模板,并使用名称“协调世界时”进行编辑,以满足Quartz,但是仍保留原始密钥。然后我把这个命令添加到我的deployment.cmd:

regedit /s addtutctz.reg

现在,我确信,即使我的实例被重新配置或重新创建了云服务,注册表项也会自动合并。

答案 1 :(得分:0)

好的,这不是最好的解决方案,但我所做的是在Azure上创建新的虚拟机,远程登录到VM,部署我的工作人员并更改了UTC的注册表项。我基本上将密钥从“UTC”更改为“协调世界时”并对我的问题进行了排序。现在Quartz.Net正在运行。

答案 2 :(得分: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();
    }