2011-04-15 25 views
1

多次在我的應用程序正在定義一個實現IHttpModule的一類,它包含以下方法Application_EndRequest(對象發件人,EventArgs的)被稱爲在asp.net

public void Init(HttpApplication application) 
    { 
     application.EndRequest += new EventHandler(Application_EndRequest); 
    } 


private void Application_EndRequest(object sender, EventArgs e) 
    { 
     HttpApplication application = (HttpApplication)sender; 
     HttpContext context = application.Context; 


     IObjectContainer objectClient = context.Items[KEY_DB4O_CLIENT] as IObjectContainer; 

     if (objectClient != null) 
     { 
      objectClient.Close(); 
     } 

     objectClient = null; 
     context.Items[KEY_DB4O_CLIENT] = null; 
    } 

當我嘗試運行應用程序並調試它,我注意到一個奇怪的事情:

在chrome私人無效Application_EndRequest(對象發件人,EventArgs e)在應用程序啓動時執行3次,應用程序結束時執行3次。

在Internet Explorer中private void Application_EndRequest(對象發件人,EventArgs e)在應用程序啓動時執行2次,在應用程序結束時執行2次。

爲什麼Application_EndRequest被執行多次。它不應該只運行一次?

另外我想知道Visual Studio開發Web服務器和IIS之間的區別?

兩者之間有什麼區別。

請幫我在期待

感謝,因爲是運行時處理的請求

回答

12

Application_EndRequest()將被調用多次。使用VSDev服務器,這將是-every-請求;包括圖像和瀏覽器可能尋找的其他各種資源,如書籤圖標圖像。

這也可以解釋瀏覽器之間的區別; IE和Chrome可能在他們試圖請求的額外東西方面有所不同,特別是:網站圖標。

+0

@Andrew是在應用程序中添加Application_EndRequest和Init方法的開銷,因爲它們必須在每次請求之前執行多次?當應用程序啓動和結束時,是否有明確的方法來調用它們? – 2011-04-15 08:53:53

+0

你的意思是'Application_Start'和'Application_End',也許? – 2011-04-15 08:55:09

+0

@Andrew似乎在沒有必要執行它們時會被執行?爲什麼他們這樣被執行? – 2011-04-15 08:55:13

相關問題