tcpTracer 是 WCF 訊息檢視神器,作為 TCP/HTTP 訊息路由器攔截、顯示、轉發請求/回應。本文以計算器服務為例,示範客戶端 ClientViaBehavior與服務端 ListenUri兩種路由模式完整配置。
ICalculate { double Add(double x, double y); }CalculateService 實作CustomBinding(TextMessageEncoding + HttpTransport)服務端點:https://127.0.0.1:9999/calculateservice
原理:SOAP To 標頭保持邏輯地址(9999),實際發送至物理地址(8888 tcpTracer)。
<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 請求/回應。
原理:客戶端不變(發送至 9999),服務實際監聽 8888,tcpTracer 反向路由(Listen 9999 → Destination 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 同樣捕獲完整訊息交換。
| 維度 | ClientViaBehavior | ListenUri |
|---|---|---|
| 修改端 | 客戶端配置 | 服務端配置 |
| SOAP To 標頭 | 邏輯地址 (9999) | 邏輯地址 (9999) | 實際網路目標 | 物理地址 (8888) | 物理地址 (8888) |
| 適用場景 | 客戶端可控、多服務共用追蹤器 | 服務端可控、舊版客戶端不可改 |
請求:POST /calculateservice HTTP/1.1,Body 含 `
回應:HTTP/1.1 200 OK,Body 含 `
掌握雙模式路由,讓 WCF 訊息流在任何網路拓撲下透明可觀測。