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 服务端点本地主机混淆的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务端点无法从本地访问

服务具有零个应用程序(非基础设施)端点

在 WCF 中获取调用者的主机名

仅在通过 Windows 服务使用 WCF 时“无端点侦听”

WCF 服务错误没有在 HTTPS 上侦听的端点

未找到 WCF 命名管道端点