Asp.Net生命周期和Http管道技術


本篇主要介紹一下內容:

1.ASP.NET生命周期

2.Http運行時

3.Http管道技術

  a)inetinfo.exe

  b)asp.net_isapi.dll

  c)aspnet_wp.exe

  d)HttpHandler

  e)HttpModule

4.實現Httphandler的使用

 

5.ASP.NET生命周期

 

 

 

 

6.(IIS)Web服務器(inetinfo.exe):

  1.只有少數幾種被客戶端請求的資源類型由iis直接處理,如對Html頁面,文本文件,jpeg和gif圖像的傳入請求

  2.對ASP.NET資源(*.aspx,*.asmx,*.ashx)的請求將傳遞到ASP.NET ISAPI擴展,該系統組件是一個名為

    aspnet_isapi.dll的Win32 Dll

7.aspnet_isapi.dll:可以處理多種資源類型,包括Web服務和Http處理程序調用

8.ASP.NET輔助進程(aspnet_wp.exe):

  1.由aspnet_isapi.dll負責調用

  2.aspnet_wp.exe負責控制請求的執行,並可以終止請求

9.aspnet_isapi.dll

 

 用此命令進行 注冊映射表,即將*.aspx與aspnet_isapi.dll關聯起來

(注意:可以添加自己的映射,如將*.Refactor與aspnet_isapi.dll關聯起來,這時候請求后綴名為Refactor的文件和請求*.aspx一樣)

 

 10.ISAPI與輔助進程的關系

  1.ISAPI和輔助進程間的通訊是使用一組 "命名管道" 進行的

  2.命名管道 是一種Win32機制,用於跨進程邊界傳輸機制,命名管道的工作方式

    與管道相似:在一端傳入數據,在另一端輸出相同的數據.建立管道既可以連接

    本地進程,也可以連接遠程計算機上運行的進程,對於本地進程間通訊,管道是

    Windows中最有效,最靈活的工具.

  3.ISAPI使用異步命名管道來將請求轉發給 輔助進程並獲得相應

  4.輔助進程 在需要查詢有關IIS環境的信息(即服務器變量)時又使用同步管道

  5.ISAPI模塊創建固定數量的 命名管道,並使用重疊的操作以通過小的線程池

    處理同一時間進行的連接.當通過管道進行的數據交換操作結束后,完成例程

    將斷開客戶端,並重新使用管道實例為新的客戶端服務.線程池和重疊操作均

    可以保證使ASP.NET ISAPI的性能達到令人滿意的水平.

    但是ASP.NET ISAPI擴展絕不會處理Http請求

11.ASP.NET的處理邏輯:

  1.當請求到達時,IIS檢查資源類型並調用ASP.NET ISAPI擴展.如果啟用了默認的

    進程模型,aspnet_isapi會將請求排隊,並將請求分配給 輔助進程.所有的

    請求數據都是通過異步I/O發送

  2.收到請求后,ASP.NET輔助進程將通知ASP.NET ISAPI,它將為請求服務(建立管道)

  3.在輔助進程的上下文中執行請求.有時,輔助進程可能需要回調ISAPI以完成請求,也就是

    需要說枚舉服務器變量.這種情況下,輔助進程將使用同步管道,因為這樣可以保持

    請求處理的邏輯順序.

  4.完成后,響應被發送到打開了異步管道的aspnet_isapi.如果aspnet_isapi檢測到

    輔助進程已取消,它將自動終止請求並釋放所有相關的IIS資源

 

12.ASP.NET運行時環境

  1.構成ASP.NET運行時環境的可執行文件  

  2.aspnet_filter.dll組件是一個小的Win32 ISAPI篩選器,用來備份ASP.NET應用程序的無Cookie會話狀態

  3.aspnet_state.exe的作用對Web應用程序更為重要,因為他用於管理會話狀態

13.Http管道

  1.在ASP.NET應用程序中,系統使用一組相關的類,通過一定的順序來處理客戶端的請求(Requset),

    ASP.NET應用程序的處理模式可稱之為Http處理管道

  2.HttpModule和HttpHandler就是這個處理管道上的兩個處理環節

 

下圖為 灰色部分的 示意圖:

 

 

14.介紹上圖各個類的作用

 

  1.HttpWorkerRequest抽象類定義了ASP.NET頁面處理請求的基本方法

 

  2.HttpRuntime提供了處理應用的一組服務

 

  3.HttpContext保存了處理一次請求的所有相關上下文信息

 

  4.HttpApplicationFactory提供相關目錄的應用程序

 

  5.HttpApplicaiton定義了所有ASP.NET應用程序的通用的方法,屬性和事件,這個類也是

 

    在用戶在global.asax文件中定義的應用基類

 

  6.HttpModules處理請求前和響應后的事件

 

  7.HandlerFactories提供應用程序中的Handlers

 

  8.HttpHandlers處理請求和響應

 

15.HttpHandler

 

  1.HttpHandler處理請求(Request)的信息和發送響應(Response)

 

  2.HttpHandler實現類似於ISAPI Extention的功能

 

  3.System.Web.UI.Page類也實現了HttpHandler接口

 

  4.可以通過HttpHandler攔截請求,執行我們的自定義處理程序

 

16.HttpHandler示例

 

  1.新建一個RefactorHandler類  

View Code
    public class RefactorHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            HttpResponse response = context.Response;
            HttpRequest request = context.Request;

            //獲取用戶請求的文件
            string filePath = request.FilePath;
            if (filePath.EndsWith("Refactor"))
            {
                response.Write("<html><body>歡迎來到我的博客:" +
                               "</br>" +
                               "<a href='http://www.cnblogs.com/refactor'>Refactor's blog http://www.cnblogs.com/refactor </a></body></html>");
            }
        }

        public bool IsReusable
        {
            get { return true; }
        }
    }

 

   2.修改Web.config 

    在  <system.web>節點下添加: 

View Code
    <httpHandlers>
      <add verb="*" path="*.Refactor" type="HttpHandlerAndHttpModule.RefactorHandler"/>
    </httpHandlers>

 

  3.測試

 

 

 轉載請注明出處:http://www.cnblogs.com/refactor


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM