摘要:iis 底層
有一天心血來潮,突然想把iis底層搞清楚來。我們天天都靠iis吃飯,不知道裏面怎麼做的總是覺得怪怪的~。
要搞懂iis跟asp.net 底層的實作流程,必須先"大致上"了解這幾個不容易記憶的名詞。
1.http.sys:一個作業系統等級的驅動程式(所謂系統等級,換句話說它可以直接跟硬體溝通)
2.w3wp.exe:一個執行程式,基本上一對一對應一個在iis上設定的應用程式集區(也有例外),中文叫「工作者處理緒」。
3.aspnet_isapi.dll:一個實作iis定義好的ISAPI介面的dll,可以想像成asp.net for iis 的"擴充插件"。技術上,它被稱作「ISAPI篩選器」。
4.named pipes:一種widows上process與process之間的通訊機制。中文叫「具名管道」。
接下來,我們分別用二張圖來介紹IIS 5 、IIS6 、 IIS 7中,一個Request進來後,怎麼到我們寫好的程式這中間的流程
圖一、iis 5 及iis 6的流程:
先從左邊看起,iis5中,要求先統一送到inetinfo.exe(IIS5的服務),然後在內部載入aspnet_isapi.dll。接下來這個dll裏面再透過具名管道傳送訊息到工作者處理序,也就是w3wp.exe。最後在w3wp這個處理序中呼叫我們寫好的程式。
接下來從上圖的右上角看起。在iis6中,http.sys出現了,要求首先送到http.sys;而aspnet_isapi.dll也"偸吃步"的直接跟"系統等級"的http.sys溝通,因此效能提升了不少。不過w3wp.exe免不了的要多了把aspnet_isapi載入的動作。
再來看iis 6 與iis 7的比較:
左半邊就跟上面介紹的一樣,就不多說了,直接來看右半邊。右半邊是iis7的新菜,叫"整合管線"模式,.net coding人員只要實作 IHttpModule 介面,就可以"進駐"IIS裏面了,不用中間人aspnet_isapi.dll,當然效率也更上一層樓。
簡介就介紹到這邊,讀者看到這邊,應該覺得清楚了許多。如果你有興趣,可以在網路上搜尋上面這些技術名詞,你應該會比較看得懂。但請注意,網路上的文章寫的可就"生硬"許多了。要有消化不良的準備。
這裏幫你準備好"進階"的參考文件…請服用
http://www.goodman-lai.idv.tw/2009/04/iis-7_23.html 賴榮樞的軟體資訊誌