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

WCF 擴展點全景圖:Dispatcher Pipeline 八大核心擴展點深度解析

     編輯:關於.NET

前言:理解 Dispatcher Pipeline 才能善用擴展點

WCF 服務端訊息處理管線 (Dispatching Pipeline) 包含從監聽、接收、分派、實例化、執行、序列化、錯誤處理等完整生命週期。本文依管線執行順序,系統梳理八大核心擴展點,說明其介面定義、介入時機與典型應用場景。

1. 自訂 InstanceContextProvider (Step 5)

角色:決定 Request 如何關聯到 InstanceContext (服務實例包裝器)。

介面:IInstanceContextProvider (GetExistingInstanceContext、InitializeInstanceContext、IsIdle、NotifyIdle)。

內建三種:PerCall、PerSession、Singleton InstanceContextProvider。

應用場景:物件池機制 — 依需求從池取實例、用畢歸還,兼顧 PerCall 無狀態語意與效能。

2. 自訂 MessageFilter (Step 6)

角色:ChannelDispatcher 依 AddressFilter / ContractFilter 選擇 EndpointDispatcher。

介面:MessageFilter 抽象類別 (Match(Message)、Match(MessageBuffer))。

內建六種:Action、MatchAll、EndpointAddress、MatchNone、PrefixEndpointAddress、XPath。

應用場景:支援 Query String 型 REST 風格路由、自訂 Header 路由邏輯。

3. 自訂 MessageInspector (Step 9)

角色:攔截 Incoming/Outgoing Message,檢查、修改 Header/Body。

介面:IDispatchMessageInspector (AfterReceiveRequest、BeforeSendReply) / IClientMessageInspector。

應用場景:記錄請求/回應日誌、注入/提取 Context Header (如相關性 ID、驗證 Token)、訊息加解密。

4. 自訂 InstanceProvider (Step 10 & 11)

角色:服務實例的建立、釋放、回收。

介面:IInstanceProvider (GetInstance、ReleaseInstance)。

應用場景:DI 容器整合 (Unity、Autofac)、AOP 攔截 (Policy Injection)、單例生命週期自訂管理。

5. 自訂 CallContextInitializer (Step 12 & 18)

角色:執行緒層級 Context (TLS) 的初始化與清理。

介面:ICallContextInitializer (BeforeInvoke、AfterInvoke)。

應用場景:多語系 Culture 切換、審計資訊注入、工作單元模式初始化。

6. 自訂 MessageFormatter (Step 13 & 17)

角色:Message (XML Infoset) 與 CLR 物件陣列雙向轉換。

介面:IDispatchMessageFormatter (DeserializeRequest、SerializeReply) / IClientMessageFormatter。

應用場景:自訂序列化邏輯 (如 Protobuf、自訂二進位格式)、處理非標準訊息結構。

7. 自訂 ParameterInspector (Step 14 & 16)

角色:輸入參數驗證 (BeforeCall) 與輸出/回傳值驗證 (AfterCall)。

介面:IParameterInspector (BeforeCall 回傳 correlationState 供 AfterCall 使用)。

應用場景:Enterprise Library Validation Block 整合、參數清洗、回傳值審計。

8. 自訂 ErrorHandler (Step 19)

角色:統一例外處理與錯誤轉換。

介面:IErrorHandler (HandleError 回傳 bool 決定是否繼續處理、ProvideFault 自訂 Fault Message)。

應用場景:Enterprise Library Exception Handling Block 整合、敏感資訊過濾 (Exception Replace)、統一錯誤碼包裝 (Exception Wrap)、記錄完整堆疊。

總結對照表

擴展點介面/基類管線階段典型應用
InstanceContextProviderIInstanceContextProviderInstanceContext 取得/建立物件池、自訂 Session 關聯
MessageFilterMessageFilterEndpoint 選擇Query String 路由、自訂 Header 路由
MessageInspectorIDispatchMessageInspector訊息收發前後日誌、Context 傳遞、加解密
InstanceProviderIInstanceProvider實例建立/釋放DI 容器、AOP 攔截
CallContextInitializerICallContextInitializer作業執行前後Culture 切換、審計 Context
MessageFormatterIDispatchMessageFormatter序列化/反序列化自訂序列化格式
ParameterInspectorIParameterInspector參數驗證Validation Block、參數清洗
ErrorHandlerIErrorHandler例外處理Exception Handling Block、錯誤包裝

結語

掌握這八大擴展點在 Dispatcher Pipeline 中的位置與職責,即可針對專案需求精準選擇介入點,將橫切關注點 (Logging、Validation、Localization、DI、AOP、Error Handling) 乾淨地從業務邏輯中分離,構建可維護、可擴展的企業級 WCF 服務。

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