1. 程式人生 > >asp.net頁面的請求處理響應的過程描述

asp.net頁面的請求處理響應的過程描述

概述

       本篇部落格從IIS到asp.net頁面後臺執行完,整個過程做一個簡單的描述,如果有不對的地方,望指出。

IIS處理請求的過程

        我們通過瀏覽器(Socket客戶端)訪問一個IIS伺服器上的網頁時,該請求到達IIS伺服器上後,IIS的http.sys(分發器)元件就會根據相應的判斷,將其交給對應的應用程式池(IIS上都有相應的註冊資訊),對應的應用程式池接收到請求後,會將其交給相應的工作程序進行處理,工作程序接到請求後,根據請求檔案的字尾名,進行判斷,如果此檔案IIS可以處理,則直接處理,如果處理不了,就從其註冊的外掛配置檔案中查詢可以處理該請求的外掛(asp.net_isapi.dll,也可以是php等等外掛),並將其交給該外掛(代理),然後,外掛就把請求交給真正的處理程式。

瀏覽器

       從程式的角度上說,瀏覽器就是一個Socket客戶端,而IIS就是一個Socket伺服器,從而來實現通訊的功能。對於上述,我們可以使用Telnet(Socket客戶端,win自帶安裝程式,需要自己安裝)來進行驗證,cmd中輸入telnet 127.0.0.1 80,就可以連線到伺服器,然後發出請求,就會得到相應的迴應,

asp.net_isapi.dll外掛

       IIS的外掛機制,使得IIS可以服務於任何語言的網站,只要其在IIS上註冊相應的外掛,那麼,IIS就可以處理這類檔案的請求,如,你想通過IIS進行php的服務,只要註冊上php的外掛就可以了,這個思想非常的厲害,使IIS的擴充套件性得到大大的提高,當然,這個外掛並不是正真處理請求的程式,而是一個代理,通過這個代理(註冊時寫在IIS配置檔案的內容)就可以讓IIS知道自己可以處理這類檔案,並且,通過這個代理,可以將這個請求交給正真的程式去處理,當然,返回的結果也是通過這個進行返回的。

        我們可以在IIS伺服器上,檢視處理程式對映中檢視其可以處理的檔案。如果你是先安裝的VS,後安裝的IIS的話,此時,如果你想讓你的IIS可以處理asp.net的相應檔案,需要我們手動的將asp.net_isapi.dll註冊到IIS中,操作:cmd—》目錄定位到安裝在本機的具體版本的.net framework目錄(裡面有aspnet_regiis.exe程式)—執行aspnet_regiis.exe -i

.net framework的HTTP管道機制

        asp.net_ispai.dall接受到請求後,將其交給.net framework,然後就開始進行http的管道機制了

        .net framework接到請求,例項化HttpRuntime物件,並呼叫ProcessRequest方法,然後就是通過HttpApplicationFacotry例項化Application物件,在例項化的過程中會繼續例項化話httpContext、HttpRequest、HttpResponse、Module等等,然後最後例項化IHttpHandler介面的例項。

        如果大家注意的話,我們的asp.net頁面就是IHttpHandler介面的一個實現者,asp.net頁面繼承page類,page類繼承IHttpHandler介面,這樣我們的asp.net頁面就可以訪問上面例項化的物件了。另外,Golbal檔案繼承HttpApplication檔案,這樣,我們就可以通過書寫Golbal中的方法,去往Http管道中的事件進行註冊了。

asp.net頁面的生命週期

        例項化IHttpHandler介面例項,實際就是例項化asp.net的頁面,而在例項化asp.net頁面的過程,主要經過這幾個事件,初始化,載入,控制元件事件,儲存state,渲染,解除安裝。這裡我們需要知道頁面上控制元件事件的執行是在,預渲染前,在load之後,當然,第一次的時候,是不會有控制元件事件觸發的,在初始化階段,完成控制元件樹的建立和相應屬性的賦值等,所以,在這裡階段時不要對控制元件的屬性值進行操作,因為沒有值,載入過程中,我們可以對控制元件進行相應的操作,如果想在load之前的話,就在preload中進行操作。

總結

       在用文字描述的過程發現,不描述不知道,一描述的時候,察覺到自己沒有把整個過程仔細想通,然後,經過又一次的查閱資料,才寫出了這些東西,希望對讀者有意,同時也建議讀者去查閱一些別的資料,去加深自己的理解。