IIS/ASPNET管道
前面我們對MVC模式及其變體作了詳細的介紹其目的在於讓讀者充分地了解ASPNET MVC框架的設計思想接下來我們來介紹支撐ASPNET MVC的技術平台顧名思義ASPNET MVC就是建立在ASPNET平台上基於MVC模式建立的Web應用框架深刻理解ASPNET MVC的前提是對ASPNET管道式設計具有深刻的認識由於ASPNET Web應用總是寄宿於IIS上所以我們將兩者結合起來介紹力求讓讀者完整地了解請求在IIS/ASPNET管道中是如何流動的由於不同版本的IIS的處理方式具有很大的差異接下來會介紹個主要的IIS版本各自對Web請求的不同處理方式
IIS x與ASPNET
我們先來看看IIS x是如何處理基於ASPNET資源(比如aspxasmx等)請求的整個過程基本上可以通過圖體現IIS x運行在進程InetInfoexe中該進程寄宿著一個名為World Wide Web Publishing Service(簡稱WSVC)的Windows 服務WSVC的主要功能包括HTTP請求的監聽工作進程和配置管理(通過從Metabase中加載相關配置信息)等
圖 IIS x與ASPNET
當檢測到某個HTTP 請求時先根據擴展名判斷請求的是否是靜態資源(比如htmlimgtxtxml等)如果是則直接將文件內容以HTTP 回復的形式返回如果是動態資源(比如aspxaspphp等)則通過擴展名從IIS的腳本映射(Script Map)中找到相應的ISAPI動態連接庫(Dynamic Link LibraryDLL)
ISAPI(Internet Server Application Programming Interface)是一套本地的(Native)Win API是IIS和其他動態Web應用或平台之間的紐帶ISAPI定義在一個動態連接庫(DLL)文件中ASPNET ISAPI對應的DLL文件名稱為aspnet_isapidll我們可以在目錄%windir%\MicrosoftNET\Framework\{version no}\中找到它ISAPI支持ISAPI擴展(ISAPI Extension)和ISAPI篩選(ISAPI Filter)前者是真正處理HTTP請求的接口後者則可以在HTTP請求真正被處理之前查看修改轉發或拒絕請求比如IIS可以利用ISAPI篩選進行請求的驗證
如果我們請求的是一個基於ASPNET的資源類型比如aspxasmx和svc等aspnet_isapidll會被加載而ASPNET ISAPI擴展會創建ASPNET的工作進程(如果該進程尚未啟動)對於IIS x來說該工作進程為aspnetexeIIS進程與工作進程之間通過命名管道(Named Pipes)進行通信
在工作進程初始化過程中NET 運行時(CLR)被加載進而構建了一個托管的環境對於某個Web應用的初次請求CLR會為其創建一個應用程序域(Application Domain)在應用程序域中HTTP運行時(HTTP Runtime)被加載並用以創建相應的應用寄宿於IIS x的所有Web 應用都運行在同一個進程(工作進程aspnet_wpexe)的不同應用程序域中
返回目錄ASPNET MVC 框架揭秘
編輯推薦
Java程序性能優化讓你的Java程序更快更穩定
Visual C++音頻/視頻技術開發與實戰
From:http://tw.wingwit.com/Article/program/net/201311/16121.html