WCF主机名始终为0.0.0.0

时间:2013-12-03 20:59:49

标签: wcf rest hostname servicehost network-interface

我的WCF REST配置存在奇怪问题。我想指出TCP正在侦听传入消息的网络接口(我有两个网络适配器)。但无论我在基地址中作为主机名放置什么,TCP始终都在监听0.0.0.0(所有接口)。

这是我的App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="RestServiceSample.ServiceImpl" behaviorConfiguration="ServiceBehaviour">
        <endpoint address="service" binding="webHttpBinding" 
                  contract="RestServiceSample.IService" 
                  behaviorConfiguration="web">
        </endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://192.168.0.100:3880/MyService"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehaviour">
          <serviceMetadata httpGetEnabled="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

代码:

var serviceHost = new ServiceHost(new ServiceImpl());
serviceHost.Open();

所以我想听192.168.0.100,但是当我运行netstat时,我可以看到在0.0.0.0:3880上有TCP连接监听。

当我在绑定配置中设置hostNameComparisonMode="Exact"时,TCP会在正确的接口上侦听,但我无法通过域名连接到服务 - 仅通过网络适配器的IP地址。

如果没有设置hostNameComparisonMode="Exact"属性,那么如何使用它?

3 个答案:

答案 0 :(得分:0)

您是否尝试为端点指定ListenUri参数?

<endpoint address="service" binding="webHttpBinding"
          listenUri="http://192.168.0.100:3880/MyService" 
          contract="RestServiceSample.IService" 
          behaviorConfiguration="web">

答案 1 :(得分:0)

使用WebServiceHost进行webhttpbinding

var serviceHost = new WebServiceHost(new ServiceImpl());
serviceHost.Open();

答案 2 :(得分:0)

FWLIW:net.tcp工作正常。

BasicHttpBinding的绑定有些奇怪,对我来说它看起来像是一个真正的错误。

它关注指定的URI。我观察到它为正确的接口添加了一个绑定,但随后又为0.0.0.0打了另一个绑定,破坏了第一步中提出的所有好处。