日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述

發(fā)布時間:2023/12/15 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://msdn.microsoft.com/zh-cn/library/ms178473(v=VS.100).aspx

在 ASP.NET 中,若要對 ASP.NET 應用程序進行初始化并使它處理請求,必須執(zhí)行一些處理步驟。 此外,ASP.NET 只是對瀏覽器發(fā)出的請求進行處理的 Web 服務器結構的一部分。 了解應用程序生命周期非常重要,這樣才能在適當?shù)纳芷陔A段編寫代碼,達到預期的效果。

?下表描述了 ASP.NET 應用程序生命周期的各個階段。

用戶從 Web 服務器請求應用程序資源。

ASP.NET 應用程序的生命周期以瀏覽器向 Web 服務器(對于 ASP.NET 應用程序,通常為 IIS)發(fā)送請求為起點。 ASP.NET 是 Web 服務器下的 ISAPI 擴展。 Web 服務器接收到請求時,會對所請求的文件的文件擴展名進行檢查,確定應由哪個 ISAPI 擴展處理該請求,然后將該請求傳遞給合適的 ISAPI 擴展。 ASP.NET 處理已映射到其上的文件擴展名,如 .aspx、.ascx、.ashx 和 .asmx。

ASP.NET 接收對應用程序的第一個請求。

當 ASP.NET 接收到對應用程序中任何資源的第一個請求時,名為 ApplicationManager的類會創(chuàng)建一個應用程序域。 應用程序域為全局變量提供應用程序隔離,并允許單獨卸載每個應用程序。 在應用程序域中,將為名為 HostingEnvironment的類創(chuàng)建一個實例,該實例提供對有關應用程序的信息(如存儲該應用程序的文件夾的名稱)的訪問。

?

如果需要,ASP.NET 還可對應用程序中的頂級項進行編譯,其中包括 App_Code 文件夾中的應用程序代碼。 有關更多信息,請參見本主題后面的“編譯生命周期”。

為每個請求創(chuàng)建 ASP.NET 核心對象。

創(chuàng)建了應用程序域并對?HostingEnvironment?對象進行了實例化之后,ASP.NET 將創(chuàng)建并初始化核心對象,如?HttpContext、HttpRequest?和?HttpResponse。?HttpContext?類包含特定于當前應用程序請求的對象,如?HttpRequest?和?HttpResponse?對象。?HttpRequest?對象包含有關當前請求的信息,包括 Cookie 和瀏覽器信息。?HttpResponse?對象包含發(fā)送到客戶端的響應,包括所有呈現(xiàn)的輸出和 Cookie。

將?HttpApplication?對象分配給請求

初始化所有核心應用程序對象之后,將通過創(chuàng)建?HttpApplication?類的實例啟動應用程序。?如果應用程序具有 Global.asax 文件,則 ASP.NET 會創(chuàng)建 Global.asax 類(從?HttpApplication?類派生)的一個實例,并使用該派生類表示應用程序。

注意

第一次在應用程序中請求 ASP.NET 頁或進程時,將創(chuàng)建?HttpApplication?的一個新實例。不過,為了盡可能提高性能,可對多個請求重復使用?HttpApplication?實例。

創(chuàng)建?HttpApplication?的實例時,將同時創(chuàng)建所有已配置的模塊。 例如,如果將應用程序這樣配置,ASP.NET 就會創(chuàng)建一個?SessionStateModule?模塊。?創(chuàng)建了所有已配置的模塊之后,將調用HttpApplication?類的?Init?方法。

下面的關系圖說明了這種關系:

由?HttpApplication?管線處理請求。

在處理該請求時將由?HttpApplication?類執(zhí)行以下事件。 希望擴展?HttpApplication?類的開發(fā)人員尤其需要注意這些事件。

  • 對請求進行驗證,將檢查瀏覽器發(fā)送的信息,并確定其是否包含潛在惡意標記。 有關更多信息,請參見?ValidateRequest?和腳本侵入概述。

  • 如果已在 Web.config 文件的?UrlMappingsSection?節(jié)中配置了任何 URL,則執(zhí)行 URL 映射。

  • 引發(fā)?BeginRequest事件。

  • 引發(fā)?AuthenticateRequest?事件。

  • 引發(fā)?PostAuthenticateRequest?事件。

  • 引發(fā)?AuthorizeRequest事件。

  • 引發(fā)?PostAuthorizeRequest?事件。

  • 引發(fā)?ResolveRequestCache事件。

  • 引發(fā)?PostResolveRequestCache?事件。

  • 根據(jù)所請求資源的文件擴展名(在應用程序的配置文件中映射),選擇實現(xiàn)?IHttpHandler?的類,對請求進行處理。 如果該請求針對從?Page?類派生的對象(頁),并且需要對該頁進行編譯,則 ASP.NET 會在創(chuàng)建該頁的實例之前對其進行編譯。

  • 引發(fā)?PostMapRequestHandler?事件。

  • 引發(fā)?AcquireRequestState?事件。

  • 引發(fā)?PostAcquireRequestState?事件。

  • 引發(fā)?PreRequestHandlerExecute?事件。

  • 為該請求調用合適的?IHttpHandler?類的?ProcessRequest?方法(或異步版 IHttpAsyncHandler.BeginProcessRequest)。 例如,如果該請求針對某頁,則當前的頁實例將處理該請求。

  • 引發(fā)?PostRequestHandlerExecute?事件。

  • 引發(fā)?ReleaseRequestState?事件。

  • 引發(fā)?PostReleaseRequestState?事件。

  • 如果定義了?Filter?屬性,則執(zhí)行響應篩選。

  • 引發(fā)?UpdateRequestCache?事件。

  • 引發(fā)?PostUpdateRequestCache?事件。

  • 引發(fā)?EndRequest事件。

  • 引發(fā)?PreSendRequestHeaders?事件。

  • 引發(fā)?PreSendRequestContent?事件。

  • ?

    ?


    生命周期事件和 Global.asax 文件

    在應用程序的生命周期期間,應用程序會引發(fā)可處理的事件并調用可重寫的特定方法。 若要處理應用程序事件或方法,可以在應用程序根目錄中創(chuàng)建一個名為 Global.asax 的文件。

    如果創(chuàng)建了 Global.asax 文件,ASP.NET 會將其編譯為從?HttpApplication?類派生的類,然后使用該派生類表示應用程序。

    HttpApplication?進程的一個實例每次只處理一個請求。由于在訪問應用程序類中的非靜態(tài)成員時不需要將其鎖定,這樣可以簡化應用程序的事件處理過程。 這樣還可以將特定于請求的數(shù)據(jù)存儲在應用程序類的非靜態(tài)成員中。 例如,可以在 Global.asax 文件中定義一個屬性,然后為該屬性賦一個特定于請求的值。

    通過使用命名約定 Application_event(如 Application_BeginRequest),ASP.NET 可在 Global.asax 文件中將應用程序事件自動綁定到處理程序。 這與將 ASP.NET 頁方法自動綁定到事件(如頁的 Page_Load 事件)的方法類似。

    Application_Start 和 Application_End 方法是不表示?HttpApplication?事件的特殊方法。 在應用程序域的生命周期期間,ASP.NET 僅調用這些方法一次,而不是對每個?HttpApplication?實例都調用一次。

    下表列出在應用程序生命周期期間使用的一些事件和方法。 實際遠不止列出的這些事件,但這些事件是最常用的。

    Application_Start

    請求 ASP.NET 應用程序中第一個資源(如頁)時調用。?在應用程序的生命周期期間僅調用一次 Application_Start 方法。 可以使用此方法執(zhí)行啟動任務,如將數(shù)據(jù)加載到緩存中以及初始化靜態(tài)值。

    在應用程序啟動期間應僅設置靜態(tài)數(shù)據(jù)。 由于實例數(shù)據(jù)僅可由創(chuàng)建的?HttpApplication?類的第一個實例使用,所以請勿設置任何實例數(shù)據(jù)。

    Application_event

    在應用程序生命周期中的適當時候引發(fā),請參見本主題前面的應用程序生命周期表中列出的內容。

    Application_Error 可在應用程序生命周期的任何階段引發(fā)。

    由于請求會短路,因此 Application_EndRequest 是唯一能保證每次請求時都會引發(fā)的事件。 例如,如果有兩個模塊處理 Application_BeginRequest 事件,第一個模塊引發(fā)一個異常,則不會為第二個模塊調用 Application_BeginRequest 事件。 但是,會始終調用 Application_EndRequest 方法使應用程序清理資源。

    Init

    在創(chuàng)建了所有模塊之后,對?HttpApplication?類的每個實例都調用一次。

    Dispose

    在銷毀應用程序實例之前調用。 可使用此方法手動釋放任何非托管資源。 有關更多信息,請參見清理非托管資源。

    Application_End

    在卸載應用程序之前對每個應用程序生命周期調用一次。?


    HTTP Module

    ?

    ASP.NET 應用程序生命周期可通過?IHttpModule?類進行擴展。 ASP.NET 包含若干實現(xiàn)?IHttpModule?的類,如?SessionStateModule?類。 您還可以自行創(chuàng)建實現(xiàn)?IHttpModule?的類。

    如果向應用程序添加模塊,模塊本身會引發(fā)事件。 通過使用 modulename_eventname 約定,應用程序可以在 Global.asax 文件中預訂這些事件。?例如,若要處理?FormsAuthenticationModule?對象引發(fā)的?Authenticate?事件,可以創(chuàng)建一個名為 FormsAuthentication_Authenticate 的處理程序。





















    本文轉自cnn23711151CTO博客,原文鏈接:http://blog.51cto.com/cnn237111/591286?,如需轉載請自行聯(lián)系原作者


    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結

    以上是生活随笔為你收集整理的IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。