6

我在尝试让 Quartz.NET 与 AdoJobStore 一起工作时遇到了麻烦。这里的其他问题似乎都没有遇到我的问题。在没有 AdoJobStore 配置的情况下,我能够使其正常工作,但最终希望保留所有内容,但是在尝试时遇到错误GetScheduler(),我无法弄清楚。

这是我的石英app.config部分:

<quartz>
   <add key="quartz.scheduler.instanceName" value="XxxDefaultQuartzScheduler"/>
   <add key="quartz.scheduler.instanceId" value="instance_one"/>

   <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
   <add key="quartz.threadPool.threadCount" value="10"/>
   <add key="quartz.threadPool.threadPriority" value="1"/>

   <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"/>
   <add key="quartz.jobStore.misfireThreshold" value="60000"/>      
   <add key="quartz.jobStore.dataSource" value="default"/>
   <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"/>        
   <add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"/>
   <add key="quartz.jobStore.tablePrefix" value="QRTZ_"/>

   <add key="quartz.dataSource.default.connectionString" value="Server=(local);Database=Quartz;UID=XXXX;PWD=XXXX"/>
   <add key="quartz.dataSource.default.provider" value="SqlServer-20"/>
   <add key="quartz.dataSource.useProperties" value="true"/>
</quartz>

这是相关的初始化代码:

var config = (NameValueCollection) ConfigurationManager.GetSection("quartz");

ISchedulerFactory factory = new StdSchedulerFactory(config);

// This is where an ArgumentOutOfRange exception occurs:
IScheduler scheduler = factory.GetScheduler();

我得到的错误是ArgumentOutOfRangeException

长度不能小于零。\r\n参数名称: 长度

单步执行代码,我可以验证配置部分是否被正确读取,并且我对配置属性的拼写错误和大小写错误进行了两次和三次检查。我已经验证了可以使用我拥有的数据库访问该数据库connectionString

在单步执行代码并检查即时窗口中的工厂变量时,我注意到的一件事是它总是说“AllSchedulers:Count = 0” - 不确定这是因为我还没有实例化一个,还是因为它的一部分我的问题。试图GetScheduler()instanceName配置中给出 -

factory.GetScheduler("XxxDefaultQuartzScheduler")

也不行。

我错过了什么/做错了什么?请指教。

4

1 回答 1

9

好的,找到了我自己的问题 - 属性石英。dataSource .useProperties 应该是石英。作业商店.useProperties

于 2013-07-04T16:36:54.277 回答