WCF 服務需寄宿於進程中,本質是建立 ServiceHost 物件。初始化過程中最關鍵步驟是建立服務描述,本文全面剖析其四層架構。
ServiceDescription 為服務運行時描述,核心屬性:
Behaviors:服務行為集合(KeyedByTypeCollection<IServiceBehavior>)ConfigurationName:配置名稱,預設為型別全名Name/Namespace:服務名稱/命名空間,映射 WSDL targetNamespace 與 <wsdl:service> nameServiceType:CLR 服務型別透過 ServiceBehaviorAttribute 設定 Name/Namespace/ConfigurationName。服務行為實作 IServiceBehavior(AddBindingParameters/ApplyDispatchBehavior/Validate),ServiceBehaviorAttribute 本身即為預定義服務行為。其他預定義行為(AspNetCompatibilityRequirementsAttribute、ServiceThrottlingBehavior 等)可透過配置套用。
ServiceEndpoint 描述端點 ABC(Address/Binding/Contract),含 ListenUri(物理位址)與 Address(邏輯位址)。Behaviors 集合掛載端點行為(實作 IEndpointBehavior),含 ApplyClientBehavior/ApplyDispatchBehavior 等,作用域限於該端點,雙向適用。
ContractDescription 描述服務契約,Behaviors 掛載契約行為(實作 IContractBehavior),作用於實現該契約的所有服務端與使用該契約的所有客戶端代理。Operations 集合含所有操作描述。
OperationDescription 描述操作契約,Behaviors 掛載操作行為(實作 IOperationBehavior),作用域僅限該操作(客戶端 ClientOperation、服務端 DispatchOperation)。
四層描述體系構成 WCF 運行時元資料骨架,行為機制提供強大擴展點。