WCF 通訊核心在於 Binding(綁定),它封裝了傳輸、編碼、協定等通道組合。本文從通道層與服務模型層劃分、通道堆疊組成、綁定物件模型三個層面,深度解析 WCF 通訊基礎設施。
| 層級 | 職責 | 開發者接觸度 |
|---|---|---|
| 服務模型層 | 程式設計模型:契約、端點、行為、宿主、代理 | 高(日常開發主戰場) |
| 通道層 | 通訊實現:訊息交換、通道堆疊、編碼、傳輸、協定 | 低(被屏蔽,進階擴展時接觸) |
服務模型層建構於通道層之上,透過 Binding 將兩者連接。
WCF 採**訊息為基礎**通訊。通道層由一系列通道組成**通道堆疊**,構成訊息流動管道:
發送方 → [協定通道] → [編碼通道] → [傳輸通道] → 網路 接收方 ← [協定通道] ← [編碼通道] ← [傳輸通道] ← 網路
**三類通道**:
**擴展性設計**:單一通道專注單一功能,組合靈活,避免巨型通道。
Binding (綁定)
└─ BindingElementCollection (有序綁定元素集合)
├─ TransactionFlowBindingElement
├─ ReliableSessionBindingElement
├─ SecurityBindingElement
├─ TextMessageEncodingBindingElement
└─ HttpTransportBindingElement
│
▼ 建構
ChannelManager (通道管理器)
├─ ChannelListener (服務端:監聽、建立輸入通道堆疊)
└─ ChannelFactory (客戶端:建立輸出通道堆疊)
│
▼ 建構
Channel Stack (通道堆疊) = 具體通道實例鏈
ChannelManager。集合順序決定通道堆疊順序(上層先建)。BuildInnerChannelListener/Factory 串聯建構。ChannelListener,客戶端為 ChannelFactory。系統綁定(BasicHttpBinding、WSHttpBinding、NetTcpBinding 等)預設組合常用通道,開箱即用。
CustomBinding:完全控制通道組合與順序,適合特殊需求(如僅需 Text + HTTP、插入自訂壓縮通道)。
<customBinding>
<binding name="MyBinding">
<transactionFlow />
<reliableSession />
<security mode="Message" />
<textMessageEncoding />
<httpTransport />
</binding>
</customBinding>
順序:**協定 → 編碼 → 傳輸**(由內而外)。
ChannelBase、ChannelListenerBase、BindingElement 三件套。掌握 Binding 與通道堆疊,即掌握 WCF 通訊的靈魂與擴展點。