3

我在 Microsoft Azure Web 角色中使用quartz.net 作为调度程序。如果我使用 RamDataStore,我可以让 Quartz.net 正常工作。但是,我想将其分解为两个组件:第一个将允许通过 Web 界面调度作业,第二个将通过工作角色执行作业。要进行这种分布式处理,我需要使用 ADOJobStore。

RamDataStore 一切正常,但当我尝试切换到 ADOJobStore 时它会中断。所以这让我相信我的财产中有些东西我错过了。我正在使用 Azure SQL 数据库,虽然这与 SQL Server 类似,但有些问题有时会导致问题。

我在 VS2010 中使用 Quartz.net 2.0(来自 nuGet),数据库是 Azure SQL。

当我调用 .GetScheduler() 时,出现以下异常:

{“无法配置 JobStore 类型 'Quartz.Impl.AdoJobStore.JobStoreTX' 道具。”}

详细信息:

{“无法将属性 'default.connectionString' 解析为正确的数据类型:找不到可写属性 'Default.connectionString'”}

我的连接代码(包括以编程方式设置的属性):

        NameValueCollection properties = new NameValueCollection();
        properties["quartz.scheduler.instanceName"] = "SchedulingServer";
        properties["quartz.threadPool.type"] = "Quartz.Simpl.ZeroSizeThreadPool, Quartz";

        properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
        properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
        properties["quartz.jobStore.clustered"] = "false";
        properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";

       properties["quartz.jobStore.dataSource"] = "default";
       properties["quartz.jobStore.default.connectionString"] = "Server=tcp:serverName.database.windows.net;Database=scheduler;User ID=scheduler@serverName;Password=***;Trusted_Connection=False;Encrypt=True;";
       properties["quartz.jobStore.default.provider"] = "SqlServer-20";
       properties["quartz.jobStore.useProperties"] = "true";

       ISchedulerFactory sf = new StdSchedulerFactory(properties);
       _scheduler = sf.GetScheduler();

任何帮助或建议将不胜感激。

4

1 回答 1

7

您的数据源属性命名存在小而微妙的错误,它应为:

properties["quartz.dataSource.default.connectionString"] = "Server=tcp:serverName.database.windows.net;Database=scheduler;User ID=scheduler@serverName;Password=***;Trusted_Connection=False;Encrypt=True;";

如果要使用配置文件的连接字符串部分,还有一个属性connectionStringName 。

于 2012-09-27T05:59:50.990 回答