我正在尝试将 HttpWebRequest 调用绑定(bind)到我的服务器(有很多 IP)上的特定 IP。我已经使用 BindIPEndPointDelegate 成功编写了这段代码,它在我的本地机器 (Windows 7) 上运行良好
我的问题是 Windows Server 2008。当我在 Windows Server 2008 上运行相同的控制台应用程序时,它在使用代理时无法绑定(bind)到 IP。更复杂的是,它似乎适用于某些目标 URL (http://www.microsoft.com) 而不适用于某些目标 URL (http://www.google.com, http://www.facebook.com)
如果我删除特定于 IP 的绑定(bind)(委托(delegate))并运行应用程序,它适用于所有 URL。
我绑定(bind)的 IP 是默认的服务器 IP 地址——意思是,在这两种情况下都应该使用相同的 IP。我已经验证了这一点,如果我不使用委托(delegate)进行绑定(bind),它会使用相同的 IP。如果我明确指定 IP,它将失败,如上所述。
我已尝试关闭防火墙、IIS 和防病毒软件 - 问题仍然存在。
最佳答案
好吧,终于明白了。
再次测试时,我发现指定 IPAddress.Any 也不起作用。另一方面,IPAddress.IPv6Any 工作正常。
最后,我在网络适配器设置中取消选中 IPv6 协议(protocol),应用程序开始针对所有 URL 正常工作并绑定(bind)所有本地 IPv4 地址。
不确定这是否是 .NET 代码或功能中的错误 - 但禁用 IPv6 为我修复了它。
最后,如果有人在使用绑定(bind)进行调用时遇到“请求的地址在其上下文中无效”,请尝试禁用您的防病毒软件。
关于sockets - 在 HttpWebRequest 中绑定(bind)到备用 IP 在 Windows Server 2008 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12992536/