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

WCF 實戰 (11):雙向通訊深度剖析 — HTTP 雙工 vs TCP 雙工 本質差異與選型指南

     編輯:關於.NET

一、雙向通訊基礎範例 (Calculator Callback)

定義雙工 Contract:ICalculator (Client→Service) + ICallback (Service→Client)。服務端透過 OperationContext.Current.GetCallbackChannel<ICallback>() 回呼客戶端。

Solution 結構

關鍵程式碼片段

// Contract
[ServiceContract(CallbackContract = typeof(ICallback))]
public interface ICalculator { [OperationContract(IsOneWay=true)] void Add(double x, double y); }

[ServiceContract] public interface ICallback { [OperationContract(IsOneWay=true)] void DisplayResult(double result); }

// Service
public void Add(double x, double y)
{
    var cb = OperationContext.Current.GetCallbackChannel<ICallback>();
    cb.DisplayResult(x + y);
}

// Client (DuplexChannelFactory)
var factory = new DuplexChannelFactory<ICalculator>(new InstanceContext(new CalculatorCallback()), "endpoint");
var proxy = factory.CreateChannel();
proxy.Add(1, 2);

二、HTTP 雙工 vs TCP 雙工:本質差異

維度HTTP 雙工 (wsDualHttpBinding)TCP 雙工 (netTcpBinding)
協議本質無連線、無狀態、Request/Reply面向連線、全雙工、持久連線
實現機制兩條獨立 HTTP 連線 (Client→Service, Service→Client)單一 TCP 連線雙向傳輸
防火牆/NAT 穿透佳 (標準 80/443 埠)差 (需開放高位埠)
效能/延遲較高 (XML 序列化、雙連線)極佳 (二進位、單連線)
適用場景跨網域、Internet、瀏覽器客戶端內網、高效能、.NET 專用

HTTP 雙工運作原理

Client 建立監聽端點 (如 https://localhost:port/guid) 等待回呼。服務端回呼時實際發起新的 HTTP Request。WCF 以 ClientViaBehavior 管理雙通道,但本質是兩條 Request/Reply 通道組合,非真正全雙工。

TCP 雙工運作原理

TCP 三次交手建立連線後,雙向資料流共用同一 Socket。WCF netTcpBinding 直接映射此特性,單一 IDuplexChannel 即實現真正雙工,無額外開銷。

三、選型建議

  • 內網、高頻、低延遲、雙邊皆 .NET → netTcpBinding (首選)。
  • 跨防火牆、Internet、非 .NET 客戶端、需 HTTP 相容 → wsDualHttpBinding (注意需開啟客戶端防火牆埠)。
  • Silverlight / 舊版瀏覽器 → 僅支援 wsDualHttpBinding (或 PollingDuplex)。

四、執行截圖

雙工執行結果

總結

理解傳輸協議對 MEP 的支援差異,才能在架構設計時做出正確選型。TCP 雙工是真正的全雙工;HTTP 雙工是兩條單工通道的巧妙組合,代價是效能與複雜度。

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