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

ASP.NET HTTP 執行階段架構深度解析:ISAPI 擴展、背景工作進程、命名管道與 Web Garden 模型

     編輯:關於ASP.NET

ASP.NET 執行階段在 IIS 中採用進程內 ISAPI 擴展 + 進程外背景工作進程的雙進程架構,平衡可靠性與效能。本文詳細剖析請求從 URL 到 HTML 的完整流程。

核心組件角色

組件進程職責
inetinfo.exe (IIS)系統進程監聽 HTTP 請求,載入 ISAPI 擴展/篩選器
aspnet_isapi.dllIIS 進程 (SYSTEM)接收 ASP.NET 請求,轉發給背景工作進程,監控其健康狀態
aspnet_wp.exe (w3wp.exe)背景工作進程載入 CLR,執行 Managed 代碼,管理 AppDomain、請求管線、快取、Session

請求處理完整流程

  1. 瀏覽器發送 HTTP 請求 → IIS (inetinfo.exe)。
  2. IIS 根據副檔名對應,將 .aspx/.asmx/.ashx 請求交給 aspnet_isapi.dll。
  3. ISAPI 擴展透過非同步命名管道將請求封包傳給背景工作進程。
  4. 背景工作進程在 HttpRuntime 協調下,建立 HttpContext,進入 HTTP 模組管線(IHttpModule)。
  5. 經 UrlAuthorizationModule、FormsAuthenticationModule、SessionStateModule 等模組處理。
  6. HttpHandlerFactory 解析對應的 IHttpHandler(如 Page、WebServiceHandler)。
  7. Handler 執行 ProcessRequest,產生 HTML 輸出。
  8. 回應沿管線逆向流回,經 ISAPI 非同步管道返回 IIS,最終送達瀏覽器。

Web Garden:多 CPU 縮放利器

  • 在 machine.config 或 web.config 設定 <processModel webGarden="true" cpuMask="0xF" />。
  • 單一機器啟動多個背景工作進程,各綁定不同 CPU 核心。
  • 請求由 ISAPI 以 Round-Robin 分發,近似線性擴展吞吐量。
  • 注意:Session 須使用 StateServer 或 SQLServer 模式,InProc 會導致跨進程遺失。

關鍵設計權衡

  • 隔離性:ASP.NET 應用程式從不在 IIS 進程內執行,工作進程崩潰不影響 IIS。
  • 效能:非同步命名管道 + 執行緒池,使進程外呼叫效能逼近進程內。
  • 可靠性:ISAPI 監控工作進程健康,自動回收記憶體洩漏、死鎖進程。

深入理解此架構,對疑難雜症排查、高效能調校、雲端部署架構設計皆有指導意義。

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