WCF专题系列(5):深入WCF寻址Part 5—逻辑地址和物理地址
[1] WCF专题系列(5):深入WCF寻址Part 5—逻辑地址和物理地址
[2] WCF专题系列(5):深入WCF寻址Part 5—逻辑地址和物理地址
[3] WCF专题系列(5):深入WCF寻址Part 5—逻辑地址和物理地址
[2] WCF专题系列(5):深入WCF寻址Part 5—逻辑地址和物理地址
[3] WCF专题系列(5):深入WCF寻址Part 5—逻辑地址和物理地址
概述
在WCF中,每个服务终结点都与两个地址相关联,一个逻辑地址和一个物理地址,逻辑地址就是SOAP消息的目标地址,即前面不止一次提到的“To”地址,而物理地址是WCF侦听器真正监听的地址。在WCF中,逻辑地址称之为终结点地址Endpoint Address,而物理地址则称之为监听地址ListenUri。
本文将详细介绍WCF中的物理地址和逻辑地址,以及如何使用tcpTrace来进行SOAP消息的跟踪。
两种地址
WCF中,物理地址负责使用特定的传输协议在特定的位置接收传入的消息,除非特别指定,否则逻辑地址将被用来做物理地址,换句话说,在以前我们对于终结点所配置的EndpointAddress都是指定了逻辑地址,如我们的服务端配置如下:
<endpoint address="http://localhost:8887/CalculatorService1" binding ="wsHttpBinding" contract="TerryLee.WCFAddressing.Contract.ICalculator"> endpoint> <endpoint address="http://localhost:8887/CalculatorService2" binding ="basicHttpBinding" contract="TerryLee.WCFAddressing.Contract.ICalculator"> endpoint>
现在我们输出一下,就可以看到两个地址是同样的值,如下代码所示:
using (ServiceHost calculatorServiceHost = new ServiceHost(typeof(CalculatorService))) { calculatorServiceHost.Opened += delegate { Console.WriteLine("Service begin to listen via the Address:{0}", calculatorServiceHost.BaseAddresses[0].ToString()); }; calculatorServiceHost.Open(); foreach (ServiceEndpoint se in calculatorServiceHost.Description.Endpoints) { Console.WriteLine("Endpoint details:"); Console.WriteLine("Logical address: \t{0}", se.Address); Console.WriteLine("Physical address: \t{0}", se.ListenUri); Console.WriteLine("Binding: \t{0}", se.Binding.Name); Console.WriteLine(); } Console.Read(); }
输出结果如图1所示:
图1