WCF未绑定到正确的IP地址

时间:2020-03-06 14:55:58  来源:igfitidea点击:

我们在出现某些问题的Windows 2003服务器上部署了WCF服务。配置使用" wsHttpBinding",我们正在指定IP地址。该服务由Windows服务托管。

当我们启动服务时,大多数情况下它会获取错误的IP地址。几次将其绑定到正确的地址,只是在处理一小会儿之后才放弃该绑定并转到绑定到NIC的另一个地址(有2个)。

它目前正在使用端口80(我们已将IIS配置为通过httpcfg绑定到仅1个地址),尽管我们尝试使用具有相同结果的不同端口进行尝试。

当Windows服务开始托管WCF服务时,属性显示该服务已绑定到正确的地址;默认情况下,该服务将被绑定到正确的地址。但是,tcpview显示它确实在侦听错误的地址。

这是设置baseAddress的配置部分。最终绑定到的是.4而不是.9

<services>
    <service name="Service.MyService"
             behaviorConfiguration="serviceBehavior">
        <host>
            <baseAddresses>
                <add baseAddress="http://xx.xx.xx.9:80/" />
            </baseAddresses>
        </host>
        <endpoint address="MyService"
                  binding="wsHttpBinding"
                  bindingConfiguration="WSHttpBinding_IMyService"
                  contract="Service.IMyService" />
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
    </service>
</services>
  • 是否需要设置其他配置?
  • 是否有工具可以跟踪将其绑定到错误地址的位置?

解决方案

WCF配置对我来说还可以。这可能与NIC卡的绑定顺序有关。确保首先使用正确地址的NIC。这是一篇讨论如何设置和查看nic绑定顺序的文章:

http://theregime.wordpress.com/2008/03/04/how-to-setview-the-nic-bind-order-in-windows/

详细信息:我从NIC上完全删除了xx.xx.xx.4 IP地址,并关闭了IIS。现在,当我尝试启动该服务时,它失败了,并且可以在系统事件日志中找到它。

Description:
Unable to bind to the underlying transport for xx.xx.xx.4:80. The IP Listen-Only list may contain a reference to an interface which may not exist on this machine.  The data field contains the error number.

我的配置文件仍然具有xx.xx.xx.9 baseAddress设置。

多一份信息。如果我们更改绑定以使用NetTcp而不是WsHttp,它将绑定到端口80上的正确地址。将其更改回WsHttp,它将返回错误的IP地址。

这个问题似乎与ISS有关。这是关于我们从http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ddf72ae0-aa1e-48c9-88d1-10bae1e87e4f.mspx?mfr=true获取的错误的描述

当HTTP.sys解析IP包含列表并发现列表中的所有条目均无效时,此错误将记录到事件日志中。如果发生这种情况,如表11.15中的说明所述,HTTP.sys会侦听所有IP地址。

我们还可以检查以下讨论类似问题的主题
http://www.webhostingtalk.com/showthread.php?t=534174

希望这可以帮助。

我们遇到了同样的问题,此功能帮助我们解决了问题:

http://msdn.microsoft.com/zh-CN/library/system.servicemodel.hostnamecomparisonmode.aspx

希望对我们有所帮助。

BaseAddress被忽略。我们需要在IIS下设置主机头。