WCF 服务端点本地主机混淆
Posted
技术标签:
【中文标题】WCF 服务端点本地主机混淆【英文标题】:WCF service endpoint localhost confusion 【发布时间】:2013-03-03 22:38:39 【问题描述】:我对某些东西为什么有效感到困惑。我正在配置这样的 wcf 服务:
<services>
<service name="ClientCommand" behaviorConfiguration="SomeServiceBehavior">
<endpoint contract="IClientCommand" binding="netTcpBinding" BindingConfiguration="TcpPort" address="net.tcp://localhost:1304" />
</service>
</services>
BindingConfiguration 和 behaviorConfiguration 很简单,只是配置了一些超时时间。
在我的exe中,我是这样启动主机的。
_serverHost = new ServiceHost(type); // implementing IClientCommand
_serverHost.Open();
这一切都非常简单而且有效,我可以从另一台电脑调用此服务。但是,在阅读了另一个问题(监听 tcp 套接字)之后,我觉得它不应该工作。当我绑定到 localhost 时,应该无法从运行它的电脑外部访问该服务? 我检查了电脑上的 netstat,它确实绑定到了 IP 地址“0.0.0.0”而不是“127.0.0.1”,这解释了为什么它可以在另一台电脑上工作。
但我不明白为什么它会从 localhost 变为“0.0.0.0”?
【问题讨论】:
我挖得更深一点,结果却更加困惑。如果我使用net.tcp://127.0.0.1/service
,它确实会绑定到环回,并且无法从电脑外部访问。但是net.tcp://localhost/service
将绑定到 0.0.0.0 并且可以从环回外部访问。为什么?
【参考方案1】:
Net.tcp 不限于在一台机器上进行通信,也许您正在考虑使用 net.pipe?关于 0.0.0.0:在运行服务的机器上如何定义主机文件? Here 是一篇关于 WCF 的好文章。
【讨论】:
嗨,我并不是说 net.tcp 仅限于在一台机器上进行通信。我的意思是,如果您使用 net.tcp://localhost:... 它应该绑定到环回地址,并且无法从 pc 外部访问。但确实如此。以上是关于WCF 服务端点本地主机混淆的主要内容,如果未能解决你的问题,请参考以下文章