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

WCF 技術深度剖析(四):IIS 寄宿實現機制深度解析——從 HttpModule 到 ASP.NET 整合管道

     編輯:關於.NET

前言:WCF 如何在 IIS 中「安家」?

WCF 服務在 IIS 中寄宿,核心靠兩個內部類型:System.ServiceModel.Activation.HttpModule(並行模式)與 HttpHandler(相容模式)。本文追溯 IIS 5.x/6/7 演進,揭示 WCF 如何接管請求、為何預設採用並行模式、以及整合管道帶來的革命性變化。

一、IIS 演進與 ASP.NET 管道回顧

1. IIS 5.x:ISAPI 橋接,進程內隔離

  • inetinfo.exe 載入 aspnet_isapi.dll → 命名管道通訊 → aspnet_wp.exe 工作進程。
  • 所有應用共用進程,僅 AppDomain 隔離。

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

  • w3wp.exe 工作進程對應應用程式池,進程級隔離。
  • HTTP.SYS (核心模式) 持續監聽、核心快取、穩定性大增。
  • ISAPI 移至工作進程,消除跨進程效能損耗。

3. IIS 7:WAS (Windows Process Activation Service) 實現非 HTTP 啟動

  • W3SVC 僅處理 HTTP,WAS 負責進程管理、配置、非 HTTP 協定啟動 (TCP、Named Pipe、MSMQ)。
  • WCF 提供 3 組 Listener + Adapter (SMHost.exe 承載 4 個 Windows Service)。
  • 配置移至 applicationHost.config (XML)。

二、ASP.NET 整合管道:統一請求處理

IIS 7 整合模式將 ASP.NET 模組 (HttpModule) 註冊到 IIS 通用管道,靜態檔案也能享用 Forms 認證、URL Rewrite 等 ASP.NET 功能。原生模組 (C++) 與託管模組 (.NET) 共同構成管道,消除雙管道重複驗證、擴展困難等痛點。

三、WCF 在 IIS 中的兩種寄宿模式

1. 並行模式:HttpModule 攔截並終結管道

  • HttpModule.Init 註冊 PostAuthenticateRequest 事件。
  • 處理完 .svc 請求後 不再傳遞給後續管道 (如 PostMapRequestHandler 等事件不觸發)。
  • 優點:WCF 行為與寄宿環境解耦,支援非 HTTP 協定一致性。
  • 缺點:HttpContext、Session、URL 授權、模擬身分等 ASP.NET 特性不可用。

2. 相容模式:HttpHandler 完整走完管道

  • 服務標註 AspNetCompatibilityRequirementsAttribute + 配置 aspNetCompatibilityEnabled="true"。
  • HttpModule 不再註冊事件,改由 HttpHandler (System.ServiceModel.Activation.HttpHandler) 處理 .svc 請求。
  • 請求完整經歷 BeginRequest → EndRequest,所有 ASP.NET 模組生效。
  • HttpHandler 實作 IRequiresSessionState,支援 Session。

四、為什麼預設選擇並行模式?

WCF 設計目標是傳輸中立:相同服務代碼可寄宿於 IIS、WAS、Windows Service、Console App,行為必須一致。並行模式將 WCF 管道與 ASP.NET 管道解耦,確保非 HTTP 傳輸 (TCP、Pipe) 不依賴 ASP.NET 執行階段。相容模式雖方便,但綁定 HTTP/IIS 環境。

總結

理解 IIS 寄宿機制,能幫你在「效能/解耦」(並行模式) 與「ASP.NET 生態整合」(相容模式) 間做出正確架構決策。

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