前言
ASP.NET 請求從 IIS 接收到進入 Managed 代碼,經歷了 IIS 5 (ISAPI)、IIS 6 (Worker Process Isolation)、IIS 7 (整合管線) 三代架構演進。理解底層機制有助於效能調校、疑難排解與架構決策。
IIS 5.0 (ASP.NET 1.x) - ISAPI 擴充模式
架構圖解

關鍵特徵
- InetInfo.exe (IIS 核心):非託管進程,載入 `aspnet_isapi.dll`。
- aspnet_wp.exe (Worker Process):獨立進程,載入 CLR,執行 Managed 代碼。
- Named Pipe 通訊:InetInfo 與 aspnet_wp 透過命名管道傳遞請求/回應。
- 單一 Worker Process:所有應用程式共用一個 `aspnet_wp`,透過 AppDomain 隔離。
- ISAPI 監控回收:偵測效能下降自動重啟 Worker Process。
優缺點
| 優點 | 缺點 |
| 架構簡單、相容性好 | 進程邊界切換開銷大 (Named Pipe) |
| AppDomain 隔離輕量 | 單一進程故障影響所有應用 |
| 無法針對不同應用設定不同身分/信任等級 |
IIS 6.0 (ASP.NET 2.0) - Worker Process 隔離模式
架構圖解

關鍵特徵
- HTTP.sys (核心模式):接收 HTTP 請求、快取回應、路由至應用程式集區。
- 應用程式集區:每個集區對應一個 `w3wp.exe` 背景進程,可設定不同身分、信任等級、回收條件。
- web garden:單一集區可啟用多個 Worker Process (多 CPU 核心利用)。
- ISAPI 仍存在:`aspnet_isapi.dll` 掛載於 `w3wp.exe` 內,請求不再跨進程。
優缺點
| 優點 | 缺點 |
| 進程級隔離:安全性、穩定性大幅提升 | 記憶體佔用較高 (多進程) |
| 彈性回收、健康監測、快速失敗保護 | 經典模式仍需 ISAPI 切換 Managed/Unmanaged |
| 支援多版本 .NET 並存 | |
IIS 7.0+ (ASP.NET 3.5+/Core) - 整合管線模式
架構重大變革
- 移除 ISAPI 層:Managed 模組 (`IHttpModule`) 與處理常式 (`IHttpHandler`) 直接掛載於 IIS 核心管線。
- 統一管線:ASP.NET 模組可處理靜態檔案、PHP、靜態內容壓縮等所有請求階段。
- 模組化架構:IIS 核心功能 (認證、壓縮、快取、追蹤) 皆為可插拔模組。
- applicationHost.config:取代 Metabase,XML 設定檔支援分散式部署。
兩種模式比較
| 經典模式 | 整合模式 (預設) |
| ASP.NET 請求經 `aspnet_isapi.dll` → Managed 管線 | 請求直接進入 IIS 管線,Managed 模組參與所有階段 |
| 相容舊版應用、需 ISAPI 權限 | 效能最佳、功能最完整 (如 `HttpModule` 處理靜態檔) |
| 雙管線切換開銷 | 單一管線、統一設定 (`system.webServer`) |
請求處理階段對照 (整合模式)
- BeginRequest → AuthenticateRequest → AuthorizeRequest → ResolveRequestCache
- MapRequestHandler → AcquireRequestState → PreRequestHandlerExecute
- ExecuteRequestHandler (頁面/Handler 執行)
- ReleaseRequestState → UpdateRequestCache → LogRequest → EndRequest
Managed 模組 (`IHttpModule`) 可訂閱任一事件;`IHttpHandler` 處理 `ExecuteRequestHandler` 階段。
ASP.NET Core 時代
- 不再依賴 `System.Web`、`IHttpModule/Handler`。
- 跨平台 Kestrel 伺服器,透過 `ASP.NET Core Module` (ANCM) 整合至 IIS (反向 Proxy)。
- 中介軟體 取代 模組/處理常式,管線完全由應用程式控制。
總結
從 IIS 5 的跨進程 ISAPI,到 IIS 6 的進程隔離,再到 IIS 7 的整合管線,ASP.NET 請求處理架構持續向「高效能、高隔離、高模組化」演進。現代開發應優先採用整合模式或 ASP.NET Core,充分發揮 IIS 核心能力。