宣告:本文只是自己的總結和積累。IIS7.x
目錄
- IIS流程及組成部分
- ASP.NET流程及組成部分
- IIS與ASP.NET MVC
一、IIS流程及組成部分
1、Http.SYS:負責監聽HTTP請求(它不屬於IIS範疇,但是和IIS聯絡緊密)
Http.SYS和IIS是相互獨立的,但是之間又是密不可分的。Http.SYS是一個執行在核心模式下的一個網路驅動,它歸屬於TCP/IP網路子系統的一部分,且是執行在TCP/IP之上。它負責著來自網路HTTP請求的監聽和過濾。靜態地址請求會直接返回到客戶端,動態請求會進入下個流程。
高效:它作為網路驅動持續執行,持續監聽過濾請求,對請求做出快速的響應。對於請求頻繁的資源,會將返回內容快取在核心模式下,後續的請求會從快取中返回內容,這樣就避免了使用者模式和核心模式的頻繁切換。
穩定:它獨立於IIS執行在核心模式下的網路驅動程式,不需要執行使用者程式,也不會受到Web程式和IIS程式的影響。
2、SvcHost.exe :接收Http請求、配置管理、工作程式管理
W3SVC(3W公共服務—World Wide Web Publishing Service): 接收Http請求
WAS(Windows程式啟用服務—Windows Process Activation Service):配置管理、工作程式管理
其中,WAS就可以接收處理HTTP請求和非HTTP請求。WAS包含一組非HTTP請求監聽器適配介面,可以接收監聽器監聽的非HTTP請求。其實W3SVC充當了HTTP請求監聽器介面卡。
WAS通過請求字尾名與Web應用對映關係,建立工作者程式(或者將請求分發給對應建好的工作者程式),在工作者程式中載入ISAPI(網際網路伺服器應用程式介面—Internet Server Application Programe Interface)
ISAPI應用程式實質是一個介面,一個IIS與.NET的橋樑入口,ISAPI維護著很多的橋樑(.dll),例如載入ASP.NET應用的Aspnet_ispai.dll。
在穿過橋樑Aspnet_ispai.dll之後,隨之進入ASP.NET的地界了,隨後的CLR的載入,AppDomain建立、Web Application的初始化等等。
二、ASP.NET流程及組成部分
進入到ASP.NET應用,載入CLR,建立AppDomain, HttpApplication的初始化。接下來穿過一串Module,這些Module裡可能實現了當請求進入程式之前的時候出發一些操作或者當請求完成時出發的一些操作,期間會經過Handler,來真正相應我們所寫的後臺程式碼。請求—>Module(請求進入前觸發的操作)—> Handler(我們的aspx頁面的後臺程式碼繼承自Page,Page繼承IHttpHandler)—>Module(請求結束後觸發的操作)
三、IIS與ASP.NET MVC
客戶端請求 —> 監聽器監聽 —> HTTP請求接收(W3SVC)或者 WAS接收到非HTTP請求 —> 對應對映關係並建立工作者程式—> 載入ISAPI—>
載入相應的 XXX_ispai.dll —>進入ASP.NET應用—> 載入CLR —> 初始化我們的應用程式 —>一系列 Module操作—>對應Handler的載入執行
ASP.NET中的Module和Handler擁有很高的擴充套件性。MVC的就是擴充套件了Module和Handler。在請求進入前,觸發Moudle,對請求進行攔截,分析其controller和action,以及其它相關的上下文資訊,然後呼叫擴充套件了IHttPHandler介面的MvcHandler,進而進入到我們所對應的具體後臺程式碼。