許多開發者錯將 IHttpModule.Init 當作 Application_Start 替代品,在其中進行應用程式初始化。
| 特性 | IHttpModule.Init | Application_Start |
|---|---|---|
| 觸發時機 | 每個 HttpApplication 實例建立時 | 第一個 HttpApplication 建立後,僅一次 |
| 執行次數 | 並發請求下可能多次 | 應用程式生命週期內僅一次 |
| 適用場景 | 註冊事件(BeginRequest 等) | 全域設定、快取預熱、資料庫連線初始化 |
ASP.NET 為支援並發,維護 HttpApplication 實例池。當請求數超過池大小,建立新實例,每個實例建立時都會實例化模組並呼叫 Init。開發時單一請求無法重現,上線後並發請求極常見,誤用將導致詭異 Bug。
MSDN《IIS 5.0 和 6.0 的 ASP.NET 應用程式生命週期概觀》含流程圖:
