使用 WebDeploy (MSDeploy) 部署到 Microsoft Azure 网站目标不起作用

Using WebDeploy (MSDeploy) to deploy to a Microsoft Azure Website target doesn't work

我正在尝试通过 Visual Studio 2015 的 "Publish" 功能将我的 Web 应用程序部署到 Azure website/app 服务暂存槽,但我收到以下错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:由于套接字错误正在重试同步(10054) 发生。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 1 次,共 10 次。 更新文件 (xxxxxxxxxxxxx__staging\bin\EntityFramework.dll)。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 2 次。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 3 次。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 4 次。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 5 次。 更新文件 (xxxxxxxxxxxxx__staging\bin\EntityFramework.dll)。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 6 次。 更新文件 (xxxxxxxxxxxxx__staging\bin\EntityFramework.dll)。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 7 次。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 8 次。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 9 次。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):警告:重试同步,因为发生套接字错误 (10054)。<br> 正在对象站点清单 (sourcePath) 上重试操作 'Serialization'。尝试 10 次中的 10 次。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5):错误:Web 部署任务失败。 (无法将数据写入传输连接:现有连接被远程主机强行关闭。) 发布部署失败。

我到处搜索解决方案。我试过重新创建一个暂存槽。我尝试在网上搜索对错误消息任何部分的任何引用;但没有可用的解决方案。

我正在使用 Visual Studio 2015 Update 3。它是一个 .NET 4.5.1 网络应用程序。

在事件日志中还有另一条错误消息: 错误代码:999 异常消息:无法将数据写入传输连接:远程主机强行关闭了现有连接。异常堆栈跟踪:现有连接被远程主机强行关闭 在 System.Net.Sockets.Socket.MultipleSend(BufferOffsetSize[] 缓冲区,SocketFlags socketFlags) 在 System.Net.Sockets.NetworkStream.MultipleWrite(BufferOffsetSize[] 缓冲区) --- 内部异常堆栈跟踪结束 ---<br> 无法将数据写入传输连接:远程主机强行关闭了现有连接。 在 System.Net.ConnectStream.InternalWrite(布尔异步、Byte[] 缓冲区、Int32 偏移量、Int32 大小、AsyncCallback 回调、对象状态) 在 System.Net.ConnectStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 大小) 在 System.IO.BufferedStream.Flush() at System.IO.BufferedStream.Dispose(布尔处理) 在 System.IO.Stream.Close() 在 System.IO.BinaryWriter.Dispose(布尔处理) 在 System.IO.BinaryWriter.Close() 在 Microsoft.Web.Deployment.PackageSerializer.Dispose() 在 Microsoft.Web.Deployment.AgentClientProvider.RemoteDestSync(DeploymentObject sourceObject、DeploymentSyncContext syncContext、Nullable1 syncPass、String syncSessionId) 在 Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject、DeploymentSyncOptions syncOptions、PayloadTable payloadTable、ContentRootTable contentRootTable、Nullable1 syncPassId、String syncSessionId) 在 Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentProviderOptions providerOptions, DeploymentBaseOptions baseOptions, DeploymentSyncOptions syncOptions)

不过,我相信以上是转移注意力的说法;我想这是一个问题:

Retrying operation 'Serialization' on object sitemanifest (sourcePath).

看来重试了10次都失败了;这可能意味着打开的 MSDeploy 连接将关闭,导致第二次失败。

请注意,在发布向导中,我单击了 "Validate connection" 按钮,它出现了一个绿色勾号

我们在部署到本地服务器时遇到了这个问题,经过大量故障排除后,我们的网络团队发现了一个拦截这些数据包并丢弃它们的网络问题。我们通过使用 WireShark 监控网络流量发现了 where/when 问题的发生。网络团队使用他们的工具进一步研究以找到问题。抱歉,我不知道他们实际上做了什么来解决这个问题。

您可以尝试从不同的网络(星巴克、家里、任何地方)进行部署以验证这是您的问题。

经过一个多星期的努力,今天成功了。我这边没有任何变化,所以 Microsoft 一定已经修复了 Azure 中的一个问题。

Microsoft 几乎已经确认这是一个错误。不过,他们正在努力重现该问题。

解决方法是将一个新的应用程序设置放入 Azure 门户上的 Web 应用程序,称为 WEBSITE_WEBDEPLOY_USE_SCM 并将值设置为 false。然后部署工作正常。