WCF 服務在 IIS 中寄宿,核心靠兩個內部類型:System.ServiceModel.Activation.HttpModule(並行模式)與 HttpHandler(相容模式)。本文追溯 IIS 5.x/6/7 演進,揭示 WCF 如何接管請求、為何預設採用並行模式、以及整合管道帶來的革命性變化。
inetinfo.exe 載入 aspnet_isapi.dll → 命名管道通訊 → aspnet_wp.exe 工作進程。w3wp.exe 工作進程對應應用程式池,進程級隔離。HTTP.SYS (核心模式) 持續監聽、核心快取、穩定性大增。SMHost.exe 承載 4 個 Windows Service)。applicationHost.config (XML)。IIS 7 整合模式將 ASP.NET 模組 (HttpModule) 註冊到 IIS 通用管道,靜態檔案也能享用 Forms 認證、URL Rewrite 等 ASP.NET 功能。原生模組 (C++) 與託管模組 (.NET) 共同構成管道,消除雙管道重複驗證、擴展困難等痛點。
HttpModule.Init 註冊 PostAuthenticateRequest 事件。PostMapRequestHandler 等事件不觸發)。HttpContext、Session、URL 授權、模擬身分等 ASP.NET 特性不可用。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 生態整合」(相容模式) 間做出正確架構決策。