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

WCF 可靠傳輸與有序訊息:Reliable Session、WS-ReliableMessaging 與傳輸層保障

     編輯:關於.NET

WCF 區分 傳輸可靠性 (Transport Reliability,如 TCP 封包重傳) 與 訊息可靠性 (Message Reliability,端對端訊息保證)。訊息可靠性基於 WS-ReliableMessaging (WS-RM) 標準,提供跨中介節點的端對端保證。

綁定與可靠會話支援對照

Binding可靠會話預設有序傳遞預設協定
BasicHttpBinding不支援-不支援--
NetTcpBinding支援Off支援OnWS-RM (OleTx/WS-AT)
NetNamedPipeBinding固有可靠On固有有序On內部管道
WSHttpBinding支援Off支援OnWS-RM (WS-AT)
WSDualHttpBinding支援On支援OnWS-RM (雙 HTTP 通道)
NetMsmqBinding不支援-不支援-MSMQ 佇列

啟用可靠會話:組態與程式碼

組態:

<netTcpBinding>
  <binding name="reliableTcp">
    <reliableSession enabled="true" ordered="true" inactivityTimeout="00:10:00" />
  </binding>
</netTcpBinding>

程式碼**:

var binding = new NetTcpBinding(SecurityMode.Transport, true); // 第二參數 reliableSession=true
binding.ReliableSession.Ordered = true;
binding.ReliableSession.InactivityTimeout = TimeSpan.FromMinutes(10);

用戶端與服務端設定必須一致,否則通訊失敗。

有序傳遞需求:DeliveryRequirementsAttribute

服務實作若依賴訊息順序 (如狀態機、序列化處理),應宣告需求:

[DeliveryRequirements(RequireOrderedDelivery = true, QueuedDeliveryRequirements = QueuedDeliveryRequirementsMode.Allowed)]
public class OrderedService : IOrderedService { ... }
  • 裝載時驗證端點綁定是否支援有序傳遞,不符合則拋出例外。
  • 可套用於服務類別 (影響所有端點) 或服務合約介面 (影響支援該合約的所有服務)。
  • NetNamedPipeBinding 固有有序,自動滿足。

客戶端產生組態範例

<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="true" />

確認 ordered="true" 且 enabled="true"。

效能與權衡

  • 可靠會話引入 訊息確認 (ACK)、重傳、視窗機制,增加網路往返與記憶體緩衝。
  • 高延遲、高丟包網路 (如跨洲際、無線) 獲益明顯;區域網路低延遲環境可能得不償失。
  • InactivityTimeout 過短導致連線頻繁中斷,過長佔用伺服器資源,建議 5-30 分鐘視業務調整。
  • 串流模式 (transferMode=Streamed) 不相容 可靠會話。

現代替代視角

.NET Core / gRPC 採用 HTTP/2 多工、內建流控與重試;ASP.NET Core 搭配 Polly 實現應用層重試策略。新架構傾向應用層冪等設計 + 基礎設施重試,而非依賴 WS-RM 協定。

總結

WCF 可靠會話提供標準化的端對端訊息保證,適用於需跨中介節點、不可接受訊息遺漏/亂序的企業整合場景。正確選擇支援綁定、配置有序/非作用中逾時、宣告 DeliveryRequirements,並評估效能成本,是穩健應用的關鍵。

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