我尝试在测试环境中使用 Web Deploy 3.5。尽管测试服务器上安装了 Web Deploy 3.5 并且启动了 Web 管理服务,但仍然失败并显示 404。
我甚至在本地(在测试服务器上)的命令行上尝试过:
"c:\Program Files (x86)\IIS\Microsoft Web Deploy V3"\msdeploy -verb:sync -source:contentPath="E:\Downloads\Deployments\DefaultSite_All_MSDeploy.zip" -dest:contentPath='DefaultSite/mySiteName',ComputerName="https://localhost:8172/msdeploy.axd?site=PhaseI",UserName='americas\r.compton',Password='notmypassword',AuthType='Basic' -enableRule:doNotDeleteRule -allowUntrusted -verbose
命令行上返回的错误详细:对远程代理 URL 进行预先身份验证'https://servername.com:8172/msdeploy.axd?site=mySiteName'as 'americas\r.compton'。错误代码:ERROR_DESTINATION_NOT_REACHABLE 更多信息:无法连接到远程计算机(“servername.com”)。在远程计算机上,确保已安装 Web Deploy 并且已启动所需进程(“Web 管理服务”)。了解更多信息:http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_DESTINATION_NOT_REACHABLE 错误:远程服务器返回错误:(404)未找到。
IIS 日志:
#软件:Microsoft Internet Information Services 7.5
#版本:1.0
#日期:2013-12-12 18:18:41 #
字段:日期时间 s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken2013-12-12 18:18:41 138.57.160.65 POST /msdeploy.axd site=mySiteName 8172 - 145.30.91.141 - 404 7 0 145
#软件:Microsoft Internet Information Services 7.5 #版本:1.0
#日期:2013-12-12 21:08:23
#字段:日期时间 s-ip cs 方法 cs-uri 主干 cs-uri 查询 s 端口 cs-用户名 c-ip cs(用户代理) sc 状态 sc-子状态 sc-win32 状态 花费时间 2013-12-12 21:08:23 fe80::7157:1fcd:691b:93f%10 HEAD /msdeploy.axd 站点=PhaseI 8172 - fe80::7157:1fcd:691b:93f%10 - 404 7 0 0 2013-12-12 21:09:32 fe80::7157:1fcd:691b:93f%10 HEAD /msdeploy.axd 站点=PhaseI 8172 - fe80::7157:1fcd:691b:93f%10 - 404 7 0 0
我认为 httpHandler、msdeploy.axd 未正确安装或配置。我是否应该期望在 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config 中的 httpHandler 中看到它?
答案1
遗憾的是,当您的解决方案包含一个 ASP.NET MVC 应用程序和两个 ASP.NET Web 服务时,Web 部署无法正常工作。我解决这个问题的唯一方法是更改我的构建过程模板以调用远程 PowerShell 脚本来为我部署。
我应该补充一下,我考虑过但未实施的一个“作弊”是在 Dev 应用服务器上安装 TFS Build 服务,并仅为部署标记它。我认为这个解决方案有点不优雅。
答案2
我以前没有使用过 msDeploy 处理程序(我们广泛使用代理),但您可以尝试在 IIS 中启用失败请求跟踪来确定问题所在。它很容易打开,并且会为您提供有关请求的更多信息以及它返回 404 的原因,而 IIS 日志不会告诉您这些信息。
您对处理程序未正确安装/配置的怀疑似乎是正确的,并且失败的请求跟踪将向您显示有关处理程序出现问题的更多信息。