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

WCF 深度之旅(17):tcpTracer 訊息路由攔截實戰——ClientViaBehavior 與 ListenUri 雙模式

     編輯:關於.NET

tcpTracer 是 WCF 訊息檢視神器,作為 TCP/HTTP 訊息路由器攔截、顯示、轉發請求/回應。本文以計算器服務為例,示範客戶端 ClientViaBehavior與服務端 ListenUri兩種路由模式完整配置。

範例架構

  • Contracts:ICalculate { double Add(double x, double y); }
  • Services:CalculateService 實作
  • Hosting:Console 自宿主,CustomBinding(TextMessageEncoding + HttpTransport)
  • Clients:Console 代理調用

服務端點:https://127.0.0.1:9999/calculateservice

模式一:ClientViaBehavior(客戶端邏輯/物理地址分離)

原理:SOAP To 標頭保持邏輯地址(9999),實際發送至物理地址(8888 tcpTracer)。

tcpTracer 設定

  • Listen On Port:8888(攔截入口)
  • Destination Port:9999(轉發目標)

客戶端配置修改

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="clientViaBehavior">
        <clientVia viaUri="https://127.0.0.1:8888/calculateservice" />
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <client>
    <endpoint 
      address="https://127.0.0.1:9999/calculateservice" 
      behaviorConfiguration="clientViaBehavior"
      binding="customBinding" bindingConfiguration="SimpleBinding"
      contract="Artech.TcpTraceDemo.Contracts.ICalculate" 
      name="calculateService" />
  </client>
</system.serviceModel>

啟動順序:tcpTracer → 服務宿主 → 客戶端。tcpTracer 顯示完整 HTTP/SOAP 請求/回應。

模式二:ListenUri(服務端邏輯/物理地址分離)

原理:客戶端不變(發送至 9999),服務實際監聽 8888,tcpTracer 反向路由(Listen 9999 → Destination 8888)。

tcpTracer 設定(反向)

  • Listen On Port:9999
  • Destination Port:8888

服務端配置修改

<services>
  <service name="Artech.TcpTraceDemo.Services.CalculateService">
    <endpoint 
      address="https://127.0.0.1:9999/calculateservice"
      binding="customBinding" bindingConfiguration="SimpleBinding"
      contract="Artech.TcpTraceDemo.Contracts.ICalculate"
      listenUri="https://127.0.0.1:8888/calculateservice" />
  </service>
</services>

結果與模式一相同,tcpTracer 同樣捕獲完整訊息交換。

核心差異對比

維度ClientViaBehaviorListenUri
修改端客戶端配置服務端配置
SOAP To 標頭邏輯地址 (9999)邏輯地址 (9999)
實際網路目標物理地址 (8888)物理地址 (8888)
適用場景客戶端可控、多服務共用追蹤器服務端可控、舊版客戶端不可改

訊息內容範例

請求:POST /calculateservice HTTP/1.1,Body 含 `12`
回應:HTTP/1.1 200 OK,Body 含 `3`

進階應用

  • 生產環境無侵入式診斷:透過負載平衡器/代理注入 tcpTracer。
  • 自動化測試驗證:擷取訊息進行合約測試。
  • 安全審計:記錄所有 SOAP 交換內容。

掌握雙模式路由,讓 WCF 訊息流在任何網路拓撲下透明可觀測。

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