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

WCF 技術深度剖析(二):IIS 與 ASP.NET 請求處理管道演進深度解析

     編輯:關於.NET

前言:管道演進決定 WCF 寄宿形態

理解 WCF 在 IIS 中的行為,必須先懂 IIS 與 ASP.NET 管道如何演進。本文詳細追溯 IIS 5.x/6/7 的架構變遷、ASP.NET 管道核心組件 (HttpApplication、HttpModule、HttpHandler) 運作機制,為後續 WCF 寄宿分析奠基。

一、IIS 5.x:ISAPI 橋接雙進程

  • inetinfo.exe 載入 aspnet_isapi.dll (ISAPI Extension)。
  • 命名管道跨進程轉發至 aspnet_wp.exe。
  • CLR 載入、AppDomain 建立、HttpRuntime 驅動管道。
  • 缺點:ISAPI 在 inetinfo 進程,跨進程通訊有損耗;所有應用共用進程,隔離不足。

二、IIS 6:應用程式池 + HTTP.SYS 核心監聽

  • HTTP.SYS (核心模式驅動) 接管 TCP 80 監聽、核心快取、請求排隊。
  • W3SVC 移至 svchost.exe,從 Metabase 讀取配置、管理應用程式池。
  • 每個應用程式池 = 一個 w3wp.exe 工作進程,進程級隔離。
  • ISAPI (aspnet_isapi.dll) 直接載入工作進程,消除跨進程開銷。

三、IIS 7:WAS 統一進程啟用,支援非 HTTP

  • W3SVC 僅處理 HTTP;WAS 負責進程管理、配置 (applicationHost.config)、非 HTTP 協定啟動。
  • Listener Adapter 介面抽象協定差異:HTTP.SYS (HTTP)、NetTcpActivator (TCP)、NetPipeActivator (Named Pipe)、NetMsmqActivator (MSMQ)。
  • 配置全面 XML 化,便於管理與部署。

四、ASP.NET 管道核心:HttpApplication、HttpModule、HttpHandler

1. HttpApplication:請求處理中樞

  • 物件池模式:首次請求建立多個,處理完歸池,後續複用。
  • 生命週期事件 (19 個) 依序觸發:BeginRequest → AuthenticateRequest → AuthorizeRequest → ResolveRequestCache → MapRequestHandler → AcquireRequestState → PreRequestHandlerExecute → [HttpHandler.ProcessRequest] → PostRequestHandlerExecute → ReleaseRequestState → UpdateRequestCache → LogRequest → EndRequest。
  • global.asax 以 Application_{EventName} 命名慣例掛接事件。

2. HttpModule:橫切關注點攔截器

  • 實作 IHttpModule.Init(HttpApplication) 註冊事件。
  • 內建模組:SessionStateModule、FormsAuthenticationModule、UrlAuthorizationModule、OutputCacheModule 等。
  • WCF 關鍵模組:System.ServiceModel.Activation.HttpModule (並行模式寄宿核心)。

3. HttpHandler:請求終點處理者

  • 實作 IHttpHandler.ProcessRequest(HttpContext)。
  • 對應資源類型:.aspx → PageHandlerFactory、.asmx → WebServiceHandlerFactory、.svc → HttpHandler (WCF)。
  • 可透過 IHttpHandlerFactory 動態建立。

五、ASP.NET 整合管道 (IIS 7 整合模式)

  • 託管模組 (HttpModule) 直接註冊到 IIS 原生管道,統一處理所有請求 (含靜態檔)。
  • 優勢:Forms 認證保護圖片、URL Rewrite 在驗證前執行、統一模組/處理常式配置、錯誤頁面配置。
  • WCF 相容模式即利用此機制,讓 .svc 走完整管道。

總結

從 ISAPI 橋接到整合管道,IIS 與 ASP.NET 從「井水不犯河水」走向「你中有我」。WCF 寄宿模式的選擇 (並行 vs 相容),本質上就是選擇在哪個層級接管請求。

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