戲說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容器中。
【編輯推薦】