2016-07-14 74 views
2

我用石英調度程序創建了asp.net站點。該工作在後臺運行,並且該站點上沒有其他活動。C# - Quartz scheduler在網站上沒有任何活動時停止運行

石英調度程序計劃每30分鐘一次。

IIS啓動後,Scheduler正常運行。

但過了一段時間,調度程序停止運行(大約1小時)。

如果在站點上有一個或多個活動作爲用戶登錄或查看儀表板,則Scheduler正常運行。

但是,如果在現場沒有活動,它會停止運行。

如何保持我的調度程序在現場沒有活動的所有時間?

P/s:我知道我的問題可以與其他問題重複。但我仍然問,因爲我不能評論其他問題的答案。

編輯:

Day Running at: 7/14/2016 4:00:00 AM 
-- 
Day Running at: 7/14/2016 4:30:00 AM 
-- 
Day Running at: 7/14/2016 5:00:00 AM 
-- 
Stopped running 
-- 
Day Running at: 7/14/2016 2:00:00 PM 
-- 
Day Running at: 7/14/2016 2:30:00 PM 
-- 
Day Running at: 7/14/2016 3:00:00 PM 
-- 
Stopped running 
-- 

回答

5

默認情況下,IIS會如果應用程序接收到一段時間沒有要求卸載應用程序。

您可以將IIS配置爲永不卸載您的應用程序。有許多原因會導致IIS卸載您的應用程序 - 請確保您禁用了所有應用程序。它位於應用程序池設置中,最好轉到高級設置並仔細通過所有設置。

請注意,如果您有後臺作業,您需要按計劃可靠地運行,除了Web應用程序外,爲什麼不將其部署在Windows服務中? Web應用程序最適合處理傳入請求,而不是運行預定作業。

UPDATE

查閱這些在你的應用程序池的高級設置:

  • 過程模型/空閒超時和空閒超時行動
  • 循環/定期的時間間隔,請求限制,專用內存限制,虛擬內存限制
+0

我有一些原因,Web應用程序使用後臺作業。我嘗試設置增加Session Timeout Idle,但我的作業仍停止運行。那麼,你可以給我一些建議IIS會卸載我的應用程序的原因嗎? – TonyBui

+0

@TonyBui:共享主機? :) –

+0

@AndreiRînea:不,我託管我的Web應用程序在私人託管。 – TonyBui

2

正常情況下you shouldn't use ASP.NET for recurring tasks因爲它不是爲此而構建的,所以建議爲此使用Windows服務。

但是,您可以使用WebBackgrounder。 Scott Hanselman似乎對endorse it;)他還演示瞭如何使用Quartz.NET。


或者你可以開始產生從你的應用程序請求轉換爲自身每分鐘一個線程,以保持它:

protected void Application_Start() 
    { 
     // ... 

     ThreadPool.QueueUserWorkItem(o => PingMyself()); 
    } 

    private static void PingMyself() 
    { 
     var webClient = new WebClient(); 
     while (true) 
     { 
      Thread.Sleep(TimeSpan.FromMinutes(1)); 
      webClient.DownloadString("http://my.public.address.com"); 
     } 
    } 
相關問題