1. 程式人生 > >回顧一般處理程序

回顧一般處理程序

tle 需要 code creat microsoft 安全性 連接數 創建 abd

今天幫同學解答一個問題的時候,涉及到一般處理程序(末尾的鏈接講了IHttpHandler 管道處理)了,之前在大三的時候接觸過,以後再也沒有接觸過;現在做個筆記總價一下;

在一般處理程序裏,有個IsReusable,百度翻譯:可重用的

IsResuable屬性指示是否可以重用於其他IHttpHandler實例;

如果設置為true,能提高性能,但要註意線程之間安全性問題 ;如果設置為false,則線程是安全的

一般情況下,都會設置成false,雖然不是性能最優,但是最安全(反正就是設置為false,就是保證安全之類的;)
1 public bool IsReusable
2         {
3 get 4 { 5 return false; 6 } 7 }

當我們打開一個網頁的時候,不管請求的是靜態的還是動態的資源,IIS會根據ISAPI(微軟和Process軟件公司聯合提出的Web服務器上的API標準)這一標準,將請求的文件根據文件後綴名的不同,轉 交給不同的處理程序。打開IIS可以看到,大部分文件都交給了aspnet_isapi.dll進行處理,但是aspnet_isapi.dll不可能對 所有文件都進行一樣方式的處理。

為了了解aspnet_isapi.dll如何進行進一步處理的,我們可以打開C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.config文件。可以看到,在<httpHandler>節點中將不同的文件類型映射給不同的handler去處理;

一般的html文件請求後臺可以請求一般處理程序;

一般處理程序的啟動函數是:

一般處理程序可以之久通過類名.ashx進行運行,例如:http://localhost:6988/Handler1.ashx

但是一開始的時候獲取會出現這樣的錯誤:沒有為請求的 URL 配置默認文檔,並且沒有在服務器上啟用目錄瀏覽(方法一,不行的話載配置方法二;重啟iis--》cmd iisresert)

技術分享圖片
 1 namespace WebApplication1
 2 {
 3     /// <summary>
 4     /// 通常是實現IHttpHandler接口,因為不必繼承自Page類,
 5     ///
所以沒有那麽多事件需要處理,不必消耗太多資源,所以性能方面要比aspx高 6 /// </summary> 7 public class Handler1 : IHttpHandler 8 { 9 10 //ProcessRequest這個方法雖然是無返回值,但是我們可以通過context.Response.Write("字符串類型")向外輸入數據 11 //還有就是這個方法,就是程序的‘主函數’,程序的運行從這裏開啟; 12 public void ProcessRequest(HttpContext context) 13 { 14 context.Response.ContentType = "text/plain"; 15 16 context.Response.Write("Hello World"); 17 } 18 19 public bool IsReusable 20 { 21 get 22 { 23 return false; 24 } 25 } 26 } 27 }
View Code

關於ashx的返回值的問題、;先看一個問題;

text/html與text/plain有什麽區別

基礎介紹1--一般處理程序下載--上傳和下載及介紹3--Ajax請求和圖片

  借鑒網上一個大神的圖

技術分享圖片

技術分享圖片
 1 IsReusable屬性用來表示在IHttpHandlerFactory對象創建IHttpHandler的時候是否能夠將這個Handler存入池中以便重用。
 2 
 3 一般處理程序(HttpHandler):是一個實現System.Web.IHttpHandler接口的特殊類。任何一個實現了IHttpHandler接口的類,是作為一個外部請求的目標程序的前提。(凡是沒有實現此接口的類,就不能被瀏覽器請求。)
 4 
 5 它由支持ASP.NET的服務器調用和啟動運行。一個HttpHandler程序負責處理它所對應的一個或一組URL地址的訪問請求,並接收客戶端發出的訪問請求信息(請求報文)和產生響應內容(響應報文)。
 6 
 7 簡單的說:咱可以通過創建一個我們自己的HttpHandler程序來生成瀏覽器代碼發送回客戶端瀏覽器。
 8 
 9 HttpHandler程序可以完成普通類程序所能完成的大多數任務:
10 
11   1.獲取客戶端通過HTML的Form表單提交的數據和URL參數
12 
13   2.創建對客戶端的響應消息內容
14 
15   3.訪問服務器端的文件系統
16 
17   4.連接數據庫並開發基於數據庫的應用
18 
19   5.調用其他類
View Code

一般處理程序用session的方法

技術分享圖片

技術分享圖片
 1 請求管道的19個事件:
 2 
 3 (1)BeginRequest: 開始處理請求
 4 
 5 (2)AuthenticateRequest授權驗證請求,獲取用戶授權信息
 6 
 7 (3):PostAuthenticateRequest獲取成功
 8 
 9 (4): AunthorizeRequest 授權,一般來檢查用戶是否獲得權限
10 
11 (5):PostAuthorizeRequest:獲得授權
12 
13 (6):ResolveRequestCache:獲取頁面緩存結果
14 
15 (7):PostResolveRequestCache 已獲取緩存 當前請求映射到MvcHandler(pr): 創建控制器工廠 ,創建控制器,調用action執行,
16 
17 view→response
18 
19 (8):PostMapRequestHandler 創建頁面對象:創建 最終處理當前http請求的 Handler 實例: 第一從HttpContext中獲取當前的PR Handler
20 
21   ,Create
22 
23 (9):PostAcquireRequestState 獲取Session
24 
25 (10)PostAcquireRequestState 獲得Session
26 
27 (11)PreRequestHandlerExecute:準備執行頁面對象
28    執行頁面對象的ProcessRequest方法
29 
30 (12)PostRequestHandlerExecute 執行完頁面對象了
31 
32 (13)ReleaseRequestState 釋放請求狀態
33 
34 (14)PostReleaseRequestState 已釋放請求狀態
35 
36 (15)UpdateRequestCache 更新緩存
37 
38 (16)PostUpdateRequestCache 已更新緩存
39 
40 (17)LogRequest 日誌記錄
41 
42 (18)PostLogRequest 已完成日誌
43 
44 (19)EndRequest 完成、
View Code

回顧一般處理程序