Asp.net

HTTPModules 和 Global.asax——ASP.NET 頁面生命週期

  • October 26, 2020

我已閱讀有關 Asp.Net 頁面生命週期的精美文章http://www.codeproject.com/Articles/73728/ASP-NET-Application-and-Page-Life-Cycle

我的理解是請求通過 MODULE(BeginRequest,authentica,author,prehandler…) HANDLER(Proccessrequest) PAGE(Init,viewstate,load,render,……,unload) MODULE(Posthandler,postrequescache,Endreques )。

Global.asax(Application_start,Application_begin,….) 在上面的流程中到底在哪裡?澄清這一點真的會有所幫助

初始化函式是先呼叫還是 Global.asax 函式?

感謝您寶貴的時間。

IIS 中的 ASP.NET 應用程序的結構如下圖所示。我知道這可能看起來很嚇人,但名字聽起來應該很熟悉。希望熟悉的名字使它更容易消化。

我不會用文字重複你在下面看到的結構。這張照片比我用句子說的要好。相反,我將直接討論該圖像對您的問題的影響。

可怕的東西

應用域

什麼是應用域?它作為應用程序的系統記憶體的私有分配。域內的所有程式碼都使用分配的域記憶體。這意味著靜態類型和引用在域中共享。域外的任何程式碼都不能訪問該域的記憶體。

每個ASP.NET 應用程序都在它所屬的每個應用程序池的應用程序域內執行。無論應用程序池中的執行緒數如何,這種一對一的關係都成立。

Global.asax

什麼是 Global.asax?在最簡單的情況下,它是一個繼承自System.Web.HttpApplication的 .NET 類。HttpApplication為 Global.asax 提供了通過請求管道引導所有 HTTP 請求的智能。它將觸發所有請求生命週期事件並在處理程序上呼叫 ProcessRequest。

每個ASP.NET 應用程序都會創建多個HttpApplication (Global.asax) 實例。當收到請求時,它將被交給HttpApplication實例之一。然後,該請求將在其生命週期內保持相同的HttpApplication實例。這意味著每個正在處理的請求都有一個HttpApplication實例。每個HttpApplication實例都可以並且將在其生命週期內被重用於處理許多請求。

應用

程序事件 Application_Start 之類的應用程序事件在哪里關聯?這取決於,因為其中一些事件是指 App Domain 而一些是HttpApplication。Application_Start 和 Application_End 指的是 App Domain 的開始和結束。其餘的應用程序事件(例如 Application_Begin)指的是HttpApplication實例的生命週期。

更多資訊

有關更多資訊,我建議閱讀這篇MSDN 文章和這篇非 MSDN 文章。

引用自:https://stackoverflow.com/questions/13319996