IIS 與ASPNET
通過上面的介紹我們可以看出IIS x至少存在著如下兩個方面的不足
ISAPI動態連接庫被加載到InetInfoexe進程中它和工作進程之間是一種典型的跨進程通信方式盡管采用命名管道但是仍然會帶來性能的瓶頸
所有的ASPNET應用運行在相同進程(aspnet_wpexe)中的不同的應用程序域中基於應用程序域的隔離不能從根本上解決一個應用程序對另一個程序的影響在更多的時候我們需要不同的Web應用運行在不同的進程中
為了解決第一個問題IIS 將ISAPI動態連接庫直接加載到工作進程中為了解決第二個問題引入了應用程序池(Application Pool)的機制我們可以為一個或多個Web應用創建應用程序池由於每一個應用程序池對應一個獨立的工作進程從而為運行在不同應用程序池中的Web應用提供基於進程的隔離級別IIS 的工作進程名稱為wwpexe
除了上面兩點改進之外IIS 還有其他一些值得稱道的地方其中最重要的一點就是創建了一個名為HTTPSYS的HTTP監聽器HTTPSYS以驅動程序的形式運行在Windows的內核模式(Kernel Mode)下它是Windows 的TCP/IP網絡子系統的一部分從結構上看它屬於TCP之上的一個網絡驅動程序
嚴格地說HTTPSYS已經不屬於IIS的范疇了所以HTTPSYS的配置信息也沒有保存在IIS的元數據庫(Metabase)中而是定義在注冊表中HTTPSYS的注冊表項的路徑為HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTPHTTPSYS能夠帶來如下的好處
持續監聽由於HTTPSYS是一個網絡驅動程序始終處於運行狀態對於用戶的HTTP請求能夠及時作出反應
更好的穩定性HTTPSYS運行在操作系統內核模式下並不執行任何用戶代碼所以其本身不會受到Web應用工作進程和IIS進程的影響
內核模式下數據緩存如果某個資源被頻繁請求HTTPSYS會把響應的內容進行緩存緩存的內容可以直接響應後續的請求由於這是基於內核模式的緩存不存在內核模式和用戶模式的切換響應速度將得到極大的改進
圖體現了IIS的結構和處理HTTP請求的流程與IIS x不同WSVC從InetInfoexe進程脫離出來(對於IIS 來說InetInfoexe基本上可以看作單純的IIS管理進程)運行在另一個進程SvcHostexe中不過WSVC的基本功能並沒有發生變化只是在功能的實現上作了相應的改進與IIS x一樣元數據庫(Metabase)依然存在於InetInfoexe進程中
圖 IIS 與ASPNET
當HTTPSYS監聽到用戶的HTTP請求時將其分發給WSVCWSVC解析出請求的URL並根據從Metabase獲取的URL與Web應用之間的映射關系得到目標應用並進一步得到目標應用運行的應用程序池或工作進程如果工作進程不存在(尚未創建或被回收)則為該請求創建新的工作進程我們將工作進程的這種創建方式稱為請求式創建在工作進程的初始化過程中相應的ISAPI動態連接庫被加載對於ASPNET應用來說被加載的ISAPIdll為aspnet_isapidllASPNET ISAPI再負責進行CLR的加載應用程序域的創建和Web 應用的初始化等操作
返回目錄ASPNET MVC 框架揭秘
編輯推薦
ASP NET開發培訓視頻教程
Microsoft NET框架程序設計視頻教程
Java程序性能優化讓你的Java程序更快更穩定
Visual C++音頻/視頻技術開發與實戰
From:http://tw.wingwit.com/Article/program/net/201311/16120.html