1.ASP.NET運行原理概述
如,
1、當一個http請求發送過來並被IIS機收到之後,IIS首先通過你請求的頁面類型為其載入相應的dll檔案,
2、然後在處理過程中將這條請求發送給能夠處理這條請求的模組,而在ASP.NET中這個模組就叫做HttpHandler,為什麼aspx這樣的檔案可以被伺服器處理,那是因為在伺服器端有預設的HttpHandler專門處理aspx檔案,
3、IIS再將這條請求發送給能夠處理這條請求的模組之前,還需要經過一些HttpModule,這些都是系統預設的Modules,而且在這個http請求傳到HttpHandler之前要經過不同的HttpModuls的處理,這就像我們如果要乘坐國際航班飛抵異國他鄉的話,在你真正坐上飛機前,要經過購買機場建設費,辦理登記手續核實身份,進行行李打包託運,進行安全檢察,現在又要進行體溫等檢察一樣,需要經一系列的嚴格的手續。這樣做有什麼好處,一是為一些必須的過程,二是為了安全性,三是為了提高效率,四是為了我們能夠在更多的環節上進行控制,即增強了我們的控制能力。而上述的都是系統的,怎麼能說是我們的對http請求控制能力能,那麼我們是否可以建立自己的HttpModule和HttpHandler嗎?答案是肯定的。但我們先不要急於做事,讓我們再深入研究一下運行機制吧。
2.ASP.NET運行機制
那麼上面這張圖讓我們能夠更清楚地看到一個http請求是如何經過伺服器的處理的,同時通過這張圖我們也可以看出Request是掌管著所有用戶端輸入的。圖中為我們展示了一個http請求有可能經過的四條路線。
(1)當你第一次訪問這個頁面時,這個請求首先依次經過HttpModuls和HttpHandler的處理,而在HttpHandler的處理中,伺服器會為你轉到你真正要訪問的頁面,然後通過ASPX Engine來找到這個頁面背後的類,並執行個體化為一個臨時對象,再此過程中會觸發一系列的事件,其中一部份的事件需要經過對象中的方法處理,之後伺服器會將這個處理後的頁面發移交給Response對象,然後由Response對象將這個頁面(其實就是HTML頁面)發送到用戶端。這就是第一條路線;
(2)而當你在這個頁面上進行重新提交一些資訊,並繼續向伺服器發送請求時,因為你的伺服器之間的會話已經建立,對於你所在的那個臨時對象在伺服器中已經建立,所以不用再經過初始化頁面的工作,故這第二條路線是按照 HttpModuls,HttpHandler,然後直接與臨時對象互動,最後將頁面發送回用戶端;
(3)第三條路線與第二條不同的是在處理請求時如果涉及到需要調用ASP Cache,既ASP 緩衝的,而臨時對象回將直接從ASP 緩衝提取資訊並返回;
(4)這第四條路線就是當你重新整理這個頁面的時候,伺服器接收到時發現這個請求先前已經處理過了,並將處理結果儲存到由一個預設的HttpModule管理的輸出緩衝中了,那麼我們就可以直接從這個緩衝提取資訊並返回,而無需再重新處理一遍了。