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

WCF 專題系列(七):訊息傳遞之綁定 Part 2 — 綁定元素深度解析與自訂

     編輯:關於.NET

綁定元素三大類

綁定由有序綁定元素組成,每個元素對應一個處理步驟,運行時建立通道堆疊:

  1. 協定綁定元素:高層處理(可靠性、安全性、交易),可 0~N 個
  2. 編碼綁定元素:訊息↔位元組序列轉換,恰好 1 個(預設:HTTP=Text,其他=Binary)
  3. 傳輸綁定元素:網路傳輸,恰好 1 個

內建協定綁定元素

1. ReliableSessionBindingElement

提供 WS-ReliableMessaging 可靠會話,保證訊息不重複、順序正確。配置:

<customBinding>
  <binding name="reliabilityhttp">
    <reliableSession />
  </binding>
</customBinding>

2. SecurityBindingElement(抽象基類)

三種具體實現對應 WS-SecurityPolicy:

  • SymmetricSecurityBindingElement:對稱加密
  • AsymmetricSecurityBindingElement:非對稱加密
  • TransportSecurityBindingElement:混合模式(傳輸層安全)

安全性繼承體系

3. TransactionFlowBindingElement

啟用傳入交易流,指定協定格式(WS-AtomicTransaction 等)。

內建編碼綁定元素

編碼繼承體系

元素特點適用場景
TextMessageEncodingBindingElement互操作性最強、效率最低跨平台、非二進制資料
BinaryMessageEncodingBindingElement效率最高、互操作性最低.NET 之間、高效能
MtomMessageEncodingBindingElement效率與互操作平衡、大型二進制優化含大量二進制資料的跨平台

內建傳輸綁定元素

TcpTransportBindingElement
HttpTransportBindingElement
HttpsTransportBindingElement
NamedPipeTransportBindingElement
PeerTransportBindingElement
MsmqTransportBindingElement
MsmqIntegrationBindingElement
ConnectionOrientedTransportBindingElement

亦可自訂傳輸元素。

綁定元素順序鐵律(自上而下)

  1. TransactionFlowBindingElement(可選)
  2. ReliableSessionBindingElement(可選)
  3. SecurityBindingElement(可選)
  4. 編碼綁定元素(必須,缺則依傳輸預設)
  5. 傳輸綁定元素(必須)
  6. 自訂元素依功能插入對應層級

程式碼範例:

var reliable = new ReliableSessionBindingElement { Ordered = false };
var text = new TextMessageEncodingBindingElement { MessageVersion = MessageVersion.Soap11WSAddressingAugust2004 };
var http = new HttpTransportBindingElement { TransferMode = TransferMode.Streamed, UseDefaultWebProxy = true };

var binding = new CustomBinding();
binding.Elements.Add(reliable);
binding.Elements.Add(text);
binding.Elements.Add(http);

自訂綁定元素開發

繼承 BindingElement 抽象基類,核心覆寫 Clone()、GetProperty<T>():

public class LoggingBindingElement : BindingElement
{
    public override BindingElement Clone() => new LoggingBindingElement(this);
    public override T GetProperty<T>(BindingContext context)
    {
        if (context == null) throw new ArgumentNullException("context");
        return context.GetInnerProperty<T>();
    }
}

完整自訂綁定元素範例將於後續通道模型文章示範。

總結

本文詳細解析 WCF 內建綁定元素分類、特性、順序規則與自訂開發基礎,為構建高階自訂綁定奠基。

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