本篇主要介紹一下內容:
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類

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.測試
轉載請注明出處:http://www.cnblogs.com/refactor