2012-11-02 63 views
1

我使用Quartz lib按計劃在ASP.NET MVC項目上執行一些任務。我將我的作業初始化爲Global.asax文件的Application_Start方法。但是經過一段時間Quartz被停止了,因爲Application_End方法被執行了。在ASP.NET MVC上使用Quartz

變量被聲明爲靜態:

public static ISchedulerFactory scheduleFactory = new StdSchedulerFactory(); 

public static IScheduler scheduler = scheduleFactory.GetScheduler(); 

這裏是如何Quards的工作是初始化:

IJobDetail jobSender = new JobDetailImpl("jobSender", "MailGroup", typeof(JobMailSender)); 

ITrigger triggerSender = new CronTriggerImpl("triggerSender", "SenderGroup", "jobSender", "MailGroup", "0 0/30 * * * ?"); 

scheduler.ScheduleJob(jobSender, triggerSender); 

scheduler.Start(); 

我發現爲什麼會發生的原因。如果所有用戶的會話都不存在,並且服務器沒有活動的用戶會話,則將執行方法Application_End。

我已經創建了新的Quartz作業,每15分鐘打開一次該網站,結果新用戶會話將在服務器上創建。但仍不時調用Application_End方法。

是否有人面臨類似的問題?也許web.config有一些設置不會執行方法Application_End,即使服務器上沒有活動會話?

回答

0

在我們的應用中,我們也面臨着Application_End了一段時間,或當Web服務器被閒置,而在此之後的下一個活動的Application_Start又稱爲後調用了同樣的問題,並且時間表被一次又一次地執行。

我們最後在我們的數據庫中有一個簡單的表格,說cron_schedule,它用來維護Quratz運行的日誌。在我們的觸發方法中,我們首先檢查數據庫中最後一次執行時間是否符合我們的執行標準,然後才執行觸發器,否則只需返回或僅創建一個日誌,以便我們可以知道日程安排已執行,但什麼也沒做。