【问题标题】:WCF is not binding to the correct IP addressWCF 未绑定到正确的 IP 地址
【发布时间】:2010-09-14 07:23:42
【问题描述】:

我们在 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 binding tcp


    【解决方案1】:

    您的 WCF 配置对我来说看起来不错。这可能是您的 NIC 卡的绑定顺序问题。确保地址正确的网卡在前。这是一篇讨论如何设置和查看网卡绑定顺序的文章:

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

    【讨论】:

    • 有2个网卡;但是一个被禁用。两个 IP 都绑定到唯一启用的 NIC。我确实尝试了订购,但没有解决问题。
    【解决方案2】:

    更多信息:我从 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 设置。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这个问题似乎与 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

        希望这会有所帮助。

        【讨论】:

        • 如原始问题所述,我们已经使用您的链接中描述的 httpcfg 来告诉 IIS 仅侦听 xx.xx.xx.4 地址。
        • 问题是只要我们使用wsHttpBinding WCF服务也使用xx.xx.xx.4地址而不是配置中指定的xx.xx.xx.9地址文件。
        • 更改为 netTcpBinding 会导致服务绑定到正确的 xx.xx.xx.9 地址;但是,我们希望使用 wsHttpBinding,因为非 WCF 客户端将需要使用此服务。
        【解决方案5】:

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

        http://msdn.microsoft.com/en-us/library/system.servicemodel.hostnamecomparisonmode.aspx

        希望对您有所帮助。

        【讨论】:

          【解决方案6】:

          BaseAddress 被忽略。你需要set a host header under IIS

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-08
            • 2018-09-19
            • 1970-01-01
            • 2012-03-14
            • 2018-11-20
            • 1970-01-01
            相关资源
            最近更新 更多