我在尝试让 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参数名称: length
单步执行代码,我可以验证配置部分是否正确读取,并且我仔细检查了配置属性的拼写错误和大小写错误。我已经验证数据库可以通过connectionString
我有。
我在单步执行代码并检查“立即窗口”中的工厂变量时注意到的一件事是,它总是显示“AllSchedulers:Count = 0” - 不确定这是否是因为我还没有实例化,或者这是否是我的问题。试图给予GetScheduler()
the instanceName
从配置 -
factory.GetScheduler("XxxDefaultQuartzScheduler")
也不行。
我错过了什么/做错了什么?请指教。