我试图在WCF发现协议的帮助下找到我的服务器。
当我为服务器指定显式地址时,一切都很好,例如:net.tcp://192.168.36.18:8888.
但是当我在服务器上指定net.tcp://0.0.0.0:8888
地址来监听我在客户端上收到net.tcp://0.0.0.0:8888的所有接口时。当然,我不能使用这个地址连接到服务器。
对wcf发现请求的物理响应来自真实服务器地址:192.168.36.100, 192.168.36.239
和192.168.36.61
。我可以通过Wireshark
看到它。但我无法从FindResponce class
获得此地址。
如果服务器配置为通过WCF发现侦听所有接口,是否有办法获取物理地址?
客户端代码:
var discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
var findResponce = discoveryClient.Find(new FindCriteria(typeof(IRadioService)));
discoveryClient.Close();
服务器上的代码:
var serviceHost = new ServiceHost(new RadioServer());
serviceHost.Open();
在服务器上配置:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="RadioServer">
<serviceDiscovery />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="RadioServer" name="Server.RadioServer">
<endpoint address="RS" binding="netTcpBinding" contract="Common.IRadioService" />
<endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://0.0.0.0:8888/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>