我們有一個作爲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