WCF服务终结点本地主机混淆

6

我不明白某些东西是如何工作的。我正在这样配置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套接字)后,我得出的印象是它不应该工作。因为我绑定到本地主机,所以该服务不应该从运行它的PC之外的任何地方访问。
我在这台电脑上检查了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 并且可以从回环之外访问。为什么呢? - Greuntesop
1个回答

0

Net.tcp 不仅限于在一台机器上进行通信,也许您正在考虑 net.pipe?关于 0.0.0.0:运行服务的机器上如何定义主机文件?这里有一篇关于 WCF 的好文章。


嗨,我不是说 net.tcp 仅限于在一台机器上通信。我是说,如果你使用 net.tcp://localhost:... 它应该绑定到环回地址,并且不能从电脑外部访问。但实际上它却可以被访问到了。 - Greuntesop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接