2015-11-08 79 views
0

我有一個MVC應用程序,它使用Quartz.NET定期發送電子郵件。儘管已發佈的應用程序在IIS上正常工作,但在回收應用程序池或重新啓動IIS上的應用程序後,它仍無法正常工作。在網上搜索我發現了幾個帖子,建議在配置文件或IIS上做一些修改,但是沒有一個能夠正常工作。那麼,有什麼方法可以解決這個問題嗎?我需要一個可以在應用程序端應用的解決方案(如果簡單,只需要更改配置等,就可以在IIS端應用)。我認爲這是在IIS上保留申請時的常見問題,不是嗎?
注:我使用Windows Server 2008和IIS 7.5。在回收或重新啓動後無法在IIS上保持活動狀態

+1

Web應用程序在哪裏發佈? ISP還是內部?我已經[回答](http://stackoverflow.com/a/31960404)幾個月前關於應用程序池和quartz.net的問題。 – LeftyX

+0

@LeftyX Mnay感謝您的回覆。實際上,你展示了可能性,然後在IIS服務器上強制應用程序始終處於活動狀態。我在IIS服務器上發佈了應用程序,根據您的文章,我認爲使用Windows Service的最佳選擇。那麼,請你澄清我應該做什麼改變?我有一個MVC5 Web應用程序,不知道如何每週觸發應用程序或Quartz工作?我知道Windows計劃程序設置,我只需要在應用程序,石英和窗口端執行其他設置。非常感謝。 –

+0

這對我來說似乎是一個配置問題。可能是應用程序在重新啓動IIS時未完全死亡,或者可能是啓動配置不是100%正確的。只是猜測。 –

回答

1

你不會在你的問題中提到你的應用程序將在哪裏運行,所以我想它將在內部託管。

關注你的評論我收集你沒有任何問題在你的服務器上安裝和運行Windows服務。

我的建議 - 以及我以前實現的東西 - 是將ASP.NET MVC應用程序僅用作創建,刪除或掛起作業/觸發器的UI,這些作業/觸發器將保存在數據庫中,無論您的應用程序發生什麼,您都不會失去工作/觸發器,只要應用程序重新聯機,它們就會立即執行。

數據庫將與另一層Windows服務共享,該服務將負責運行您的預定作業。

第一步是設置和使用AdoJobStore來存儲Quartz.Net數據。正如您在帖子中看到的那樣,您可以使用幾個提供商。

第二步是創建和配置您的Windows服務。我會用TopShelf來承載它。實施非常簡單直接;加上你可以使用Quartz.Net集成提供的here

如果您仔細閱讀文檔,您將無法發現整合解決方案的任何問題。

Quartz.Net取決於你必須添加的一些配置在你的app.config/web.config。在這個answer中有關於配置和AdoJobStore的詳細解釋。

有幾件事要記住實施這種類型的解決方案。
你的Web應用程序會爲屬性threadPool在你的配置設置爲ZeroSizeThreadPool

<add key="quartz.threadPool.type" value="Quartz.Simpl.ZeroSizeThreadPool, Quartz" /> 

或代碼:

properties["quartz.threadPool.type"] = "Quartz.Simpl.ZeroSizeThreadPool, Quartz"; 

,它永遠不會啓動調度程序(你的windows服務去使用它)。

+0

非常感謝您的詳細解釋。我只是有時間繼續進行,並且希望確定如果在同一個解決方案中使用除MVC應用程序之外的控制檯應用程序並從Windows計劃任務調用此應用程序更好。因爲我嘗試了很多東西,但都沒有工作,我真的不想用除了現在的方法以外的其他方法。任何有關使用控制檯應用程序或保持Quartz或Hangfire應用程序(發佈到IIS)活動的想法? –

相關問題