2011-05-10 19 views
19

使用WebActivator PreApplicationStart方法時,實際觸發綁定到此的方法的運行方式是什麼?當IIS7啓動App Pool時?當第一個請求發送到網絡服務器?還有別的嗎?如果您有答案,您是否也可以提供一個參考信息來獲取這些信息?PreApplicationStartMethod何時被觸發運行?

是否在IIS 7.5中進行這種更改?

回答

24

WebActivator PreApplicationStart實際上依賴於ASP.NET PreApplicationStartMethodAttribute(請參閱this鏈接查看web激活器的工作方式)。

PreApplicationStartMethodAttribute工作時ASP.NET runtime starts up即使在app_start事件被觸發之前,應用程序和代碼仍在管道的早期運行。因此,要回答您的問題,首次向Web服務器發出請求時會觸發(這將會啓動應用程序)。

請注意,觸發器與ASP.NET應用程序啓動相關,而與應用程序池無關。由於其他應用程序(可以是非ASP.NET應用程序),您的應用程序池可能正在運行,但當ASP.NET應用程序發出第一個請求時,會觸發此特定應用程序(因爲應用程序已啓動)。

如果您使用的是auto-start功能,那麼IIS將在您的應用程序池回收站上重新啓動您的應用程序,因此將觸發PreApplicationStart

+0

你從ScottGu給的文章很棒。我很想知道你對這個'IProcessHostPreloadClient'接口的看法。既然看起來你可以在應用程序接收到它的第一個請求之前擁有自己的緩存邏輯,你認爲這是一個好的選擇,而不是在收到請求之前使用'PreApplicationStartMethod'來運行代碼嗎? – Eli 2011-05-11 13:01:01

+0

@Eli,IProcessHostPreloadClient的確切目的是爲應用程序(傳統上在app_start事件或PreApplicationStartMethod中運行的代碼添加預熱邏輯。唯一的問題是它需要IIS 7.5,並且仍然有很少的基於Win 2003的prod環境/ 2008以及XP環境下的開發環境 – VinayC 2011-05-12 04:02:24

+0

@VinayC,自動啓動功能不會觸發Application_Start,您確定它會觸發PreApplicationStart事件嗎? – 2012-01-04 14:25:04

7

對VinayC答案的一個小補充:如果在PreApplicationStartMehod中添加斷點並調試Web應用程序,則可能會在每個請求中看到它被調用。我很容易證實,這不是通過在我的PreApplicationStartMethod中寫入日誌文件的通常行爲。如果未連接到調試器,則此方法不會在每個請求上運行。

+0

在Azure中'WebActivator.PreApplicationStartMethod'啓動方法觸發多次。可能的問題是什麼? – ManirajSS 2016-01-28 08:16:26

+0

@ManirajSS你可以有多個應用程序實例。 http://stackoverflow.com/a/6957462/242520 – 2016-02-21 04:46:23