WCF未绑定到正确的IP地址
我们在出现某些问题的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下设置主机头。