• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • ASP.NET 2.0運行時簡要分析(1)

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    概述: 本文基于ASP .net 2.0的源代碼,對ASP.NET 2.0運行時進行了簡要的分析,希望能幫助你理解ASP.NET 2.0中請求處理過程及頁面編譯模型。 關鍵字: ASP.NET 2.0運行時,原理,請求處理,頁面編譯,ASP.NET 2.0 HTTP Runtime 主要類: System.Web.HttpRunti
         概述:
      
       本文基于ASP.net 2.0的源代碼,對ASP.NET 2.0運行時進行了簡要的分析,希望能幫助你理解ASP.NET 2.0中請求處理過程及頁面編譯模型。
      
        關鍵字:
      
        ASP.NET 2.0運行時,原理,請求處理,頁面編譯,ASP.NET 2.0 HTTP Runtime
      
        主要類:
      
        System.Web.HttpRuntime
        System.Web.HttpApplicationFactory
        System.Web.HttpApplication
        System.Web.Compilation.BuildManager
        System.Web.Compilation.ApplicationBuildProvider
        System.Web.Compilation.BuildProvidersCompiler
        System.Web.UI.PageHandlerFactory
      
      
        請求處理簡要流程圖:
      
      
      
      閱讀建議:
      
        用Reflector工具邊查看ASP.NET 2.0的源代碼邊閱讀。
      
        分析:
      
       當我們通過瀏覽器向ASP.NET 2.0網站的一個asp.net頁面發起請求時,在服務器端首先是IIS收到請求,IIS一看是asp.net頁面,心里很開心,因為這個請求不用它處理,交給ASP.NET ISAPI就行了。ASP.NET ISAPI的工作也比較輕松,他的主要任務就是安排aspnet_wp.exe處理請求,并監視aspnet_wp.exe進程的執行情況,如果aspnet_wp.exe進程太累了,不能出色地完成任務,ASP.NET ISAPI就要讓他下崗,換一個新的aspnet_wp.exe來處理工作。
      
        aspnet_wp.exe的主要任務是將請求交給一系列稱為的 HTTP 管道的托管對象。如果把ASP.NET ISAPI比做銷售經理,那aspnet_wp.exe就是生產經理,而HTTP 管道就是生產的流水線。負責流水線的小組就是HttpRuntime,生產經理aspnet_wp.exe會將訂單(HTTP請求)交給HttpRuntime小組的工作人員ProcessRequest(HttpWorkerRequest wr),HttpRuntime根據內部的分工,最終由ProcessRequestInternal(HttpWorkerRequest wr)在流水線上進行生產,所以ProcessRequestInternal(HttpWorkerRequest wr)是我們分析的重點。
      
         ProcessRequestInternal的主要工作是:
      
        1. 創建HttpContext實例。
      
        2. 對第一次請求進行初始化(EnsureFirstRequestInit)。
      
        a) 在EnsureFirstRequestInit中通過調用System.Web.HttpRuntime.FirstRequestInit進行一些初始化工作,比如:將Web.Config配置讀到到RuntimeConfig中,從bin目錄中裝載所有dll文件。
      
        3. 創建HttpWriter實例。
      
        4. 通過調用HttpApplicationFactory.GetApplicationInstance創建HttpApplication實例。
      
        在HttpApplicationFactory.GetApplicationInstance中有三個關鍵方法:
      
      HttpApplicationFactory._theApplicationFactory.EnsureInited();
      HttpApplicationFactory._theApplicationFactory.EnsureAppStartCalled(context);
      HttpApplicationFactory._theApplicationFactory.GetNormalApplicationInstance(context);
      
        下面我們對這三個方法逐個進行分析:
      
        1) HttpApplicationFactory._theApplicationFactory.EnsureInited();
      
        該方法檢查HttpApplicationFactory是否被初始化,如果沒有,就通過HttpApplicationFactory.Init()進行初始化。
      在Init()中,先獲取global.asax文件的完整路徑,然后調用CompileApplication()對global.asax進行編譯。
      那編譯是如何進行的呢?
      
      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>