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.測試