asp.net架構
asp.net架構
asp時代已經過去,web2.0的時代已經來臨。asp.net2.0經過MS高度封裝,在vs.net下的開發已經完全是傻瓜式的了,但我不願只做個coding man。
在以往的asp時代,當請求一個*.asp檔案的時候,這個請求首先被一個名為inetinfo.exe進程截獲,開啟工作管理員,發現inetinfo.exe其實就是www服務。Inetinfo.exe截獲之後,馬上把控制權交給一個名為asp.dll進程,asp.ddl就會解釋和執行這個asp頁面,之後把資料流返回給client瀏覽器,如果你是XP系統,就能在C:"WINDOWS"system32"inetsrv目錄在找到該檔案,此時的asp要通過解釋執行,每請求一次,都要從頭解釋,人世間最痛苦的事,莫過如此。
既然有更新的技術,當然要使用新技術了,老使用舊技術也不能說明你用情專一,^-^
在asp.net2.0時代,當client向IIS請求 *.aspx檔案時,請求也同上面一樣被inetinfo.exe進程截獲,inetinfo.exe判斷檔案的尾碼之後,將這個請求轉交給aspnet_isapi.dll,(你可以在C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727目錄下找到該檔案),而aspnet_isapi.dll則會通過一個名為HttpPipeLine的管道,將這個請求發送給aspnet_wp.exe進程,(你可以在C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727目錄下找到該檔案,同時在工作管理員中也可以找到),一旦http請求進入aspnet_wp.exe進程後,asp.net framework就會通過httpRuntime來處理這個請求,然後把資料流發送回client端的瀏覽器。
只喜歡和美女聊天的男人,決不是好男人。我們可以把HttpRuntime看成一位美女。既然她是美女,那當然要研究研究了。HttpRuntime到底是什麼呢?她不是一個實體,而是執行asp.net的一個抽象的大環境,記住這點很重要。我們來具體看看HttpRuntime到底是怎樣執行的?當http請求進入httpRuntime之後,這個請求會被繼續被送入到一個名為HttpApplication Factory的工廠中,工廠為這個http請求產生一個HttpApplication的執行個體,隨後這個執行個體被送到HttpModule容器中,隨後http請求繼續送到HttpHandler Factory工廠,
這個工廠也會產生一個HttpHandler的執行個體,這個執行個體的processRequire方法處理傳進來的請求,然後把處理好的結果和控制權交給HttpModule容器,HttpModule容器再把從HttpHandler執行個體處理好的資料流回傳到clinet端的瀏覽器,這樣一個Http請求的完美生命週期就結束了。
記住,真正處理Http請求的地方在HttpHandler執行個體的processRequire方法中,而到最後回傳資料流到client端的地方是HttpModule容器中。
說了這麼多,感覺有點亂,畫個圖,把整個流程整理清楚。
上面是我個人的理解,有不妥之處,請多多指點。