【发布时间】:2016-06-09 21:00:45
【问题描述】:
为什么在发布到解析为 IPv6 地址的 Intranet 站点时,Visual Studio Web 部署会出现“发送时发生意外错误”失败?我假设 IPv6 与它有关,因为将 IPv4 地址添加到主机文件可以解决问题并且 Web 部署成功。
详情:
- 最初构建错误来自 TeamCity 构建代理,但在尝试从 Visual Studio 发布(或仅验证发布配置文件中的连接)时会出现同样的问题。
- 对目标计算机的 ping(成功)解析为 IPv6 地址,该地址与在目标计算机本身上运行“ipconfig”时找到的地址相同,但尾端的 Scope ID 不同。
- 目标计算机的 Windows UNC 共享路径工作正常
- 目标机器实际上是运行构建代理的 VM 的主机。
以下是在发布配置文件上验证连接的错误。
以及原始构建/部署尝试的详细信息。
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4276, 5):Web 部署任务失败。 (无法完成对远程代理 URL 'https://tapserver:8172/msdeploy.axd?site=MealPlannerCIAPI' 的请求。) 此错误表示您无法连接到服务器。确保服务 URL 正确,此计算机和服务器计算机上的防火墙和网络设置配置正确,并且已在服务器上启动相应的服务。 错误详情: 无法完成对远程代理 URL“https://tapserver:8172/msdeploy.axd?site=MealPlannerCIAPI”的请求。 底层连接已关闭:发送时发生意外错误。 无法从传输连接读取数据:现有连接被远程主机强行关闭。 现有连接被远程主机强行关闭
我再次解决了这个问题,但这对我来说是一个非常令人困惑的解决方案。当显然已经使用 v6 到达该主机时,什么会破坏任何通过将 IPv4 地址添加到主机文件来修复的 msdeploy 调用?
【问题讨论】:
-
因为不仅你的机器和服务器必须支持 ipv6,你和服务器之间的所有路由器也必须支持。如果没有适当的服务在您和服务器之间进行 v6->v4->v6 桥接,您的数据包将在某处丢失。例如从你的房子到城镇边缘可能有一条 10 车道的高速公路,从服务器城镇的边缘到它的前门还有另一条 10 车道的高速公路,但你的城市被海洋和泥泞的山羊小道隔开。
-
啊,即使没有互联网也适用?这严格来说都是在同一个局域网上,从虚拟机到它的主机[虽然是的,我确信它必须命中路由器,所以也许这就足够了]。令人惊讶的是,当 ping、共享路径和访问该机器上现有的 Web 端点都可以正常工作时,它会失败。只是不是端口 8172 上的这些 msdeploy 调用。哎呀,即使我将 msdeploy 端点粘贴到浏览器中,我也可以看到端点 there...
-
如果都是本地的,而且你不需要ipv6,可以尝试关闭两端的ipv6。
-
是的,在 hosts 文件中放置一个 ipv4 地址绕过了这个问题,但是关闭 ipv6 通常听起来是一个很好的解决方案来绕过它。我开始怀疑它是否甚至可能是在 MS 的网络发布代码中如何进行 http 调用的错误 - 也许它们只是不是为 IPv6 编写的(基于stackoverflow.com/questions/7468782/http-request-over-ipv6)
-
您是否检查过基于 IPv6 的消息(当然是 HTTPS)是否曾经到达您的服务器?即使它们到达,也可能有防火墙规则要阻止,或者您的 IIS 管理服务仅监控 IPv4 地址。在放弃之前还有很多事情需要调查。
标签: visual-studio iis teamcity msdeploy