2010-07-28 34 views
1

我有幾個應用程序正在部署到.NET/IIS環境。對於這些應用程序,我已在web.config的system.web/httpModules部分中註冊了IHttpModule的實現。在我的IHttpModule實現中,我有一個Init()方法,它啓動一些守護進程線程並記錄應用程序已啓動。如何在第一個請求之前導致HttpModule被調用?

我的問題是Init()不會被調用,直到第一個HTTP請求進來。是否有辦法強制系統繼續並立即執行我的模塊,而不是等待第一個HTTP請求?

+0

您應該考慮澄清問題的標題 – STW 2010-07-28 17:06:22

+0

您是否有更好的標題建議?我對.NET世界很陌生,所以我不知道什麼標題對.NET專家更有意義。 – 2010-07-28 21:22:25

+0

我認爲我的根本脫節是具有J2EE經驗我習慣於實現ServletContextListener並在應用程序容器重新啓動或應用程序部署時隨時調用contextInitialized()方法。這可能會在HTTP請求進入之前發生,因此我可以使用它來設置服務並進行初始化。我在.NET世界中尋找類似的「應用程序生命週期」事件。 – 2010-07-28 23:58:47

回答

0

你應該在Application_Start方法的代碼移到Global.asax file

protected void Application_Start(object sender, EventArgs e) 
{ 
    //your initialization code 
} 

更新:
正如在評論中指出,這不是解決問題的Application_Start的解決方案也被稱爲在第一請求。

因此,似乎唯一的解決方案是在IIS重新啓動後立即找到調用網頁的方法。

這裏有一些建議從another website

一個棘手的解決這個問題 可以增加你的網站搜索引擎 。搜索引擎頻繁地抓取頁面 。所以,他們會打你的網站的頁面 導致 Application_Start,因此服務 將啓動並運行。

另一個想法是將您的 網站註冊到一些流量或 可用性監控服務。 有很多網絡服務,其中 密切關注您的網站,並檢查 是否存活以及 的表現是否令人滿意。所有這些 服務打你的網站頁面和 然後收集統計數據。所以,通過 註冊這樣的服務,你可以 保證你的web應用程序是 一直活着。

我會去與監控服務解決方案,服務等(我沒有嘗試他們):
http://www.montastic.com/
http://www.siteuptime.com/

+0

這將如何不同?根據您鏈接的Wikipedia頁面,「在運行時,在第一個請求到達時,Global.asax將被解析並編譯爲動態生成的.NET Framework類。」這與我在Global.asax中看到的行爲一致。 – 2010-07-28 20:21:42

+0

你是對的。我確信當IIS啓動應用程序時它會被解僱。 我更新了我的答案,添加了另一個解決方案(儘管它比解決方案更適用於解決方法) – 2010-07-29 09:47:57

1

如果你在IIS7您可以使用IIS應用程序預熱模塊以確保您的應用程序始終處於運行狀態:http://learn.iis.net/page.aspx/688/using-the-iis-application-warm-up-module/

還檢查應用程序池設置,以便在沒有任何活動時不會關閉並重新啓動。

否則,我建議你創建一個NT服務,並把守護線程放在那裏。

+0

我應該提到這是IIS6。 – 2010-07-28 17:16:01

+0

即使我可以將守護程序線程移動到另一個進程中,我仍然希望應用程序立即通過所有啓動過程,而不是等待第一個HTTP請求。 – 2010-07-28 17:16:52

+0

您可以將初始請求作爲部署過程的最後一步,並將應用程序池設置爲不回收。 – 2010-07-28 17:22:09

相關問題