ASP.NET管道

1.ASP.NET生命週期html

2.Http運行時web

3.Http管道技術api

  a)inetinfo.exe服務器

  b)asp.net_isapi.dllasp.net

  c)aspnet_wp.exe異步

  d)HttpHandleride

  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類  

複製代碼
    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>節點下添加: 

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

 

  3.測試

 

相關文章
相關標籤/搜索