2014-05-04 25 views
3

我在我的asp網站中使用石英,我在application_start方法中初始化調度器,並在application_end方法中關閉,我的觸發器每天都會觸發,但是如果有一段時間沒有請求,我發現我的調度器會自動關閉,所以我的背景工作將不會觸發,有沒有更好的方法來保持調度程序的生命週期,只有當服務器停止時才關閉?如何保持石英.net的調度程序活着?

+0

您是否嘗試從application_end中刪除關閉代碼?不知道它是否有效,只是一個建議。 – TamerM

+0

Saddly它不會工作 – TommyLike

+1

看看這個:http://www.codeproject.com/Articles/12117/Simulate-a-Windows-Service-using-ASP-NET-to-run-sc – TamerM

回答

2

一般來說,如果您需要可靠的日程安排,您不應該在網站中執行此操作。

正如您發現的,工作進程將在一段時間後關閉。即使您強制工作進程始終運行,也有可能導致其終止的條件。這不是一個好主意。

相反,你應該編寫一個Windows服務並運行quartz.net。

如果您無法安裝服務(假設您處於共享主機環境中),那麼您的選擇會受到更多限制。

+0

除了從Windows服務器,有沒有辦法解決這個問題在網站或iis? – TommyLike

+0

@TommyLike - 沒有什麼可以「修復」。 IIS正在按照它應有的工作。你對於它應該如何工作有一個無理的期望。事實上,你想要做的就是打破它。 –

0

我想知道同樣的事情。最終,雖然我同意普遍的共識,但我想看看它是如何實現的,因爲我自己也處於類似的情況,那裏沒有Windows服務。

我所做的只是創建一個新的作業,它在執行時嚮應用程序本身發送HTTP請求。對我而言,我在一個簡單包含@Datetime.Now.ToString()的頁面上指出它。

向自己發送HTTP請求的操作應該足以保證調度程序(以及父進程)處於活動狀態。

它的確如此而不是然而,停止應用程序停止/回收沒有警告。如果你想要一種方法來處理這個問題,那麼你可能需要不止一個站點運行它自己和另一個站點。這樣,如果一個網站發生故障,另一個網站可以打開它(假設它已經啓動)將其恢復。

0

有一個IIS配置允許工作進程始終保持運行。我通過另一個SO回答link找到了這個設置。

編輯C:\ WINDOWS \ SYSTEM32 \ INETSRV \設置\的applicationHost.config包括:

<applicationPools> 
    <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" /> 
</applicationPools> 

斯科特·格思裏(微軟產品經理.NET)已經answerered直接關係到OP的問題一個問題( link)。

@Dominic Pettifer,

如果我設置STARTMODE = 「AlwaysRunning」 這是否意味着Web App將 '從不' 關閉,並且將始終保持運行,即使沒有 交通擊球該網站很長一段時間(除非當然是 手動關閉,或服務器關閉/崩潰等)?我問的原因是 是因爲我喜歡在 IIS ASPNET工作進程上運行後臺線程/服務,而不是使用Windows服務(我們 處理在其服務器上有很多安全限制的客戶端 ,這使得運行Windows服務difficalt或不可能)。 正常情況下,我必須設計一些定期打到網站 的東西,以保持ASPNET工作進程的活動並阻止它關閉 。

這應該意味着該應用程序和工作過程中始終 運行 - 所以我覺得確實處理您的方案以及對 你。

希望這有助於

斯科特

0

一個更簡單的方法是使用質量保證檢查。使用Zapix工具,我能夠安排我的網站每20分鐘進行一次質量檢查。 Zapix只是訪問了該網站並收到了http響應。通過使用Zapix,它模仿了手動訪問網站以觸發電子郵件的功能。這樣,應用程序池線程就會不停地被喚醒。