总体设计如下:
非常简单,是吗?在过去,我曾经使用自己的基于 UDP 广播的发现机制构建了十几个此类东西。
但现在我想我会很酷很时髦,并在 Ad Hoc 模式下使用时髦的 WCF Discovery。它有效!谁能告诉我呢? :-)
但也不完全是。 正如我之前提到的here和there,发现返回来自服务配置的硬编码 URL。也就是说,如果服务的配置文件中有
<baseAddresses><add baseAddress="net.tcp://localhost:1234/My/Service" /></baseAddresses>
,那么这正是我将从发现客户端获得的内容 - 包括“localhost”部分。
不用说,如果我尝试使用该 URL 调用该服务,结果并不令人兴奋。
所以问题是:如何让发现客户端给我可用的 URL,而不是 localhost 式的垃圾?
为了节省大家的时间,有几个行不通的想法:
换句话说,我不需要调整服务,而是让发现客户端向我提供发现响应来自的地址。
您应该可以通过用通配符替换
localhost
来解决此问题:
<baseAddresses><add baseAddress="net.tcp://*:1234/My/Service" /></baseAddresses>
除通配符之外的另一个选项是使用计算机的 DNS 可解析主机名而不是 localhost。