前一天學習了http協議,簡單的socket編程,昨日就開始進入正式的asp.net學習,第一階段入門的學習大致上分成了5個階段,分別如下:
- 一般處理常式,html控制項,與.net內部對象,目標:知道ASP.NET的運行機制原理,對幾個asp.net核心對象有個初步的瞭解
- webform aspx:控制項樹,頁碼產生等
- ajax:理解ajax實現機制
- webform伺服器控制項:沒啥好說的
- asp.net高階內容:緩衝/母板頁/錯誤頁/靜態頁/網站部署/頁面生命週期/httpmoudle/url重寫等
昨天開始進入入門階段第1階段的學習,由於前天自己做了個web伺服器(上篇部落格中類比了瀏覽器與伺服器之間的交流),已經瞭解了整個初步的流程,所以學習一般處理常式就不是什麼問題.下面看一個小小的DEMO:首先建立一個登陸的html頁面和一個一般處理常式:
<form action="Login.ashx" method="GET">
<input type="text" name="UserName " value=""/>
<input type="text" name="PassWord" value="" />
<input type="submit" name="submit" value="submit" />
</form>
當我們輸入使用者名稱跟密碼,提交給一般處理常式幫我們處理:
public void ProcessRequest(HttpContext context)
{
//指定輸出格式
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
context.Response.Write(context.Request.QueryString["name"]+"歡迎您....");
}
當然一般程式處理需要大量輸出html時還是非常不方便,需要拼接html代碼,用起來不方便,這裡我就不示範了,當然處理檔案,圖片還是非常好用,以至於出現了webform,完全可以把前台頁面看成一個模板(用過codesmith的人都知道模板,裡面有<% %>可以寫C#代碼),前台頁面繼承後台,所以後台頁面類的一些東西可以加到前台去,幕後處理完,前台就跟著變,這樣就不需要輸入大量的html代碼,我暫且把webform的前台頁面看成一個模板.ok不說webform.
當我們輸入登入名稱跟密碼後提交按鈕,瀏覽器幫我們做了什麼,伺服器又是怎麼接收到這些資料的?我們看似非常的簡單,瀏覽器幫請求封裝成http請求,然後通過socket發送到伺服器,服務交給一般處理常式處理,其實其中經過大量了處理,下面我們來看看詳細的處理過程.
Client-----HTTP.SYS--IIS-----W3SVC服務-----INetInfo.exe---asp.net_Isapi----W3WP.EXE----ISAPIRuntime------httpRuntime-----httpapplication
當用戶端發送請求通過socket到達web伺服器,首先到達一個核心模組Http.SYS,它的職責主要解析當前請求的協議以及連接埠,另外就是分發當前請求給處理http請求程式,然後到達我們熟悉的IIS伺服器,W3SVC服務的INETINFO.EXE會分析進程裡面的中繼資料,如果是靜態頁面等就直接處理,如果是ashx,aspx等就會交給asp.net_isapi,這是個com程式c++寫的負責net運行時啟動,並負責將http請求交給asp.net運行時...這個dll是非常重要,可以算是橋樑.然後到達isapiRuntime,會調用processReuquest方法,下面簡稱pr方法,通過ecb一個控制代碼擷取到IIS的請求報文,然後建立一個httpworkrequest對象,裡面封裝了我們發送給的請求---再然後到httpruntime,它也有pr的方法,把httpworkrequest再封裝撐httpcontext,其中就包含httprequest跟httpresponse,httpapplication是通過工廠反射出來的,其中有個httpapplication應用池,然後httpapplication有23個事件,其中19個公開的,,在第8個事件建立我們的handerl執行個體,在11跟12事件之間調用handerl執行個體的pr方法.這樣一個一般處理常式差不多就結束了,事件結束後,就按原路返回給用戶端.我感覺如果我們要看裡面的源碼等httpruntime 是個入口.我們可以用反編譯工具看看裡面到底是怎麼寫的.
說了這麼多,我們能學到什麼呢,知道這些又有什麼用呢,我想不懂得asp.net運行機制的,出了問題你都不知道在哪邊,關鍵我們還能學到思想,在那請求管道23個事件中我們可以進行擴充,通過httpmodule等,本身httpapplication自己就註冊了這些事件,可以把httpmodule看成過濾器,這種外掛程式機制我們可以學學,如果有能力可以用到我們以後的項目當中去.下面是一張圖裡面是大概的流程,此圖還不是很詳細,推薦大家去看個部落格寫的挺不錯的 http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp有些資料也是從這裡面學習到的,由於剛剛接觸asp.net很多地方寫的不好,可能有錯誤,請大家指出錯誤~