我们有一个作为Windows服务运行的Quartz.Net安装。这运行良好。我们还有一个ASP.Net应用程序,用于添加/编辑作业并监视作业。我们偶尔会在ASP.Net应用程序中出现错误。错误是“计划程序已关闭”。或“名称为'JOB_SCHEDULER_NAME'的计划程序已存在。”从ASP.Net应用程序检索Quartz.net作业信息
如果刷新页面,它工作正常。我已经能够通过反复快速打开同一页面的多个实例来重新创建问题。所以,我目前的理论是,我们得到Scheduler实例的方式不是线程安全的。
作为一个例子,这里是我们如何获取工作信息的简化版本:
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler();
var jobDetail = scheduler.GetJobDetail("SomeJobName", "SomeJobGroup");
在ASP.Net应用程序加载页面时,这是正在做。
的ASP.Net的配置设置是:
<quartz>
<add key="quartz.scheduler.instanceName" value="COMPANY_NAME_JobScheduler" />
<add key="quartz.scheduler.instanceId" value="Provider.DEV" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.useProperties" value="true" />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz " />
<add key="quartz.dataSource.default.connectionString" value="server=PROD_SQL_SERVER;uid=SQL_USER;pwd=SQL_PASSWORD;database=Scheduler" />
<add key="quartz.dataSource.default.provider" value="SqlServer-20" />
</quartz>
Windows服务正在初始化这样的调度:
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler();
Windows服务配置为:
<quartz>
<add key="quartz.scheduler.instanceName" value="COMPANY_NAME_JobScheduler" />
<add key="quartz.scheduler.instanceId" value="Service.PROD" />
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="10" />
<add key="quartz.threadPool.threadPriority" value="2" />
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.useProperties" value="true" />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz " />
<add key="quartz.dataSource.default.connectionString" value="server=PROD_SQL_SERVER;uid=SQL_USER;pwd=SQL_PASSWORD;database=Scheduler" />
<add key="quartz.dataSource.default.provider" value="SqlServer-20" />
</quartz>
是有更好的方法来“查询”调度程序?
编辑:增加了更多的配置信息
需要更多信息。例如:什么是调度器工厂配置? (无论是在客户端还是在服务器端)。你在哪里实例化客户端中的调度器工厂和调度器? – 2010-07-08 21:19:49
增加了更多信息。这有帮助吗? – 2010-07-08 21:31:43