程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> IHttpModule.Init方法被執行多次的原因(1)

IHttpModule.Init方法被執行多次的原因(1)

編輯:關於C語言

發現不少朋友跟我一樣,錯把IHttpModule.Init拿來當做Application_Start的替代品,在其中做一些應用程序初始化的操作。

但其實IHttpModule.Init和Global.asax中的Application_Start事件性質是不同的,不能直接拿IHttpModule.Init來代替Application_Start做ASP.NET應用程序的初始化過程。也不能簡單的拿Init方法被重復調用來斷定是ASP.Net程序發生了重啟。

原因是IHttpModule.Init在ASP.Net響應請求時有可能被重復調用多次,在實際網站運行過程中更是極有可能發生的。

為什麼IHttpModule.Init會被調用多次呢 原因是每個HttpApplication實例同時只能處理一個請求,而ASP.Net是支持一定的並發請求的,所以HttpApplication的實例在不夠響應並發請求時會被創建多個來響應不同的請求,而每個HttpApplication實例在被創建後都會創建一組新的HttpModule並調用Init方法。

而Application_Start只會在第一個HttpApplication對象被創建後調用,後續創建的HttpApplication實例不會觸發此事件。

我想HttpApplication實例的重用是導致IHttpModule的Init方法用途被誤解的一個主要原因,因為平時我們調試程序時都是只有一個請求,基本上不可能發生重復執行HttpModule的Init方法的情況。而在實際網站運行環境下,並發請求是很平常的,如果誤用了Init方法,可能會導致程序在實際環境下出奇怪問題。

具體細節可以參考MSDN的《IIS 5.0 和 6.0 的 ASP.Net 應用程序生命周期概述》一文,以下是文章中提供的圖片:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved