首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

IIS 5/6/7 ASP.NET 請求處理管線演進深度比較

     編輯:關於ASP.NET

前言

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

IIS 5.0 (ASP.NET 1.x) - ISAPI 擴充模式

架構圖解

IIS 5 請求處理流程

關鍵特徵

  • 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 隔離模式

架構圖解

IIS 6 請求處理流程

關鍵特徵

  • 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`)

請求處理階段對照 (整合模式)

  1. BeginRequest → AuthenticateRequest → AuthorizeRequest → ResolveRequestCache
  2. MapRequestHandler → AcquireRequestState → PreRequestHandlerExecute
  3. ExecuteRequestHandler (頁面/Handler 執行)
  4. 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 核心能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved