排查 Visual Studio 的 Web 部署问题
适用于: Internet Information Services
本文可帮助排查尝试从 Visual Studio 发布到未通过 Web 部署正确配置的服务器时出现的一系列错误。 尽管本文是为特定产品版本编写的,但概念也可以应用于较新版本。
若要收集以下屏幕截图和错误,请使用 Visual Studio 中的新 ASP.NET MVC 项目。 目标服务器是使用 Internet Information Services (IIS) 的 Windows Server 的全新安装。 没有其他配置完成。
无法连接到服务器
可能会遇到的第一个错误类似于 Visual Studio 输出窗口中的以下屏幕截图。 为了提高可读性,将在屏幕截图下提供邮件全文:
Web deployment task failed.(Could not connect to the destination computer ("deployserver").On the destination computer, make sure that Web Deploy is installed and that the required process("The Web Management Service") is started.)
This error indicates that you cannot connect to the server. Make sure the service URL is correct,firewall and network settings on this computer and on the server computer are configured properly,and the appropriate services have been started on the server.
Error details:
Could not connect to the destination computer ("deployserver"). On the destination computer,
make sure that Web Deploy is installed and that the required process
("The Web Management Service") is started.
Unable to connect to the remote server
A connection attempt failed because the connected party did not properly respond after a period
of time, or established connection failed because connected host has failed to respond 192.168.0.211:8172
此错误中突出显示的文本(以下部分中的其他错误)是了解问题性质的关键。 Web 部署未收到来自服务器的回复,因此 Visual Studio 无法区分多个可能的原因。 因此,它提供了一个要尝试的内容列表。
是否安装了 Web 管理服务?
在 IIS 服务器上,打开 Internet Information Services (IIS) 管理器 并选择计算机名称节点。 在 “功能 ”视图中,向下滚动到 “管理 ”部分并查找以下图标:
如果没有,则需要通过 “添加角色服务 ”对话框安装管理服务。 还可以通过“产品”选项卡中的“Web 平台安装程序”安装它。在左侧列中选择“服务器”,然后选择“IIS:管理服务”。
注意
安装管理服务后,需要启动它,因为它不会自动启动。 为此,请双击“管理服务”图标。 显示“管理服务”窗格后,在右侧的“操作”窗格中选择“开始”。
服务 URL 是否正确?
默认情况下,Web 管理服务侦听端口 8172,但此设置可以更改。 检查正在使用的端口的最简单方法是按前面所述打开 管理服务 窗格,并查看“连接”部分中的 IP 和端口信息。 如果端口已更改为 8172 以外的其他端口,则需要确保允许新端口通过防火墙,并更新 Visual Studio 发布设置中的服务 URL 以使用新端口。
(403) 禁止
安装 Web 管理服务后,Visual Studio 可能会显示以下错误:
Web deployment task failed.(Could not connect to the destination computer ("deployserver") using
the specified process ("The Web Management Service") because the server did not respond.
Make sure that the process ("The Web Management Service") is started on the destination computer.)
Could not connect to the destination computer ("deployserver") using the specified process
("The Web Management Service") because the server did not respond. Make sure that the process
("The Web Management Service") is started on the destination computer.
The remote server returned an error: (403) Forbidden.
此消息具有误导性。 它指出服务器未响应,但 403 错误表示 Web 部署可以联系服务器,但请求被主动拒绝。 Web 管理服务的 HTTP 日志可以帮助确认请求到达服务器,并提供有关失败的实际请求的详细信息。 默认情况下,可以在 %SystemDrive%\Inetpub\logs\WMSvc
中找到此日志。 与其他 IIS 日志一样,数据不会立即写入日志,因此可能需要等待几分钟才能查看请求或重启 Web 管理服务来刷新日志。
在日志中 WMSVC
,可以看到以下消息:
2011-06-02 17:59:05 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 - 192.168.0.203 - 403 6 5 1669
6
日志中的后403
是子状态代码,表示 IP 地址被拒绝。 可以在 IIS 中的 HTTP 状态代码中找到 IIS 的状态和子状态代码的完整列表。
管理服务是否配置为允许远程连接?
这是导致 403.6 响应的最有可能的原因。 双击 “管理服务 ”图标,并验证是否 选中了“启用远程连接 ”。 必须停止服务才能进行更改,因此请确保在完成时重新启动它。
是否已允许通过 Windows 防火墙使用 Web 管理服务?
在服务器上安装 Web 管理服务时,入站防火墙规则名为 Web 管理服务(HTTP 流量传入)。 转到具有高级安全性的“启动>AdministrativeTools>Windows 防火墙”,验证是否已启用此规则。 选择“ 入站规则 ” ,并在列表中查找 Web 管理 规则。 应为所有配置文件启用该规则。
如果使用第三方防火墙,则需要确保允许端口 8172 上的入站连接。
是否已为管理服务配置了 IP 限制?
你可能会收到 403 错误的另一个常见原因是管理服务已配置为拒绝客户端的 IP。 默认情况下,只要允许远程连接,它就配置为允许所有 IP。 可以通过双击 管理服务 图标来检查 IP 限制。 任何配置的 IP 限制规则都在 IPv4 地址限制页底部。
(404) 未找到
Web deployment task failed.(Could not connect to the destination computer ("deployserver").
On the destination computer, make sure that Web Deploy is installed and that the required process
("The Web Management Service") is started.
The requested resource does not exist, or the requested URL is incorrect.
Error details: Could not connect to the destination computer ("deployserver").
On the destination computer, make sure that Web Deploy is installed and that the required process
("The Web Management Service") is started.
The remote server returned an error: (404) Not Found.
404 错误指示 Web 部署能够联系服务器上的 Web 管理服务,但找不到所需的内容。 首先要做的是确认 Web 部署尝试连接到的资源。 如果在目标服务器上的 %SystemDrive%\Inetpub\logs\WMSvc 下查看 Web 管理服务日志,则日志中看到WMSVC
如下所示的条目:
2011-05-12 15:21:50 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 - 192.168.0.203 - 404 7 0 1606
Msdeploy.axd 是 Web 部署请求的处理程序。
是否安装了 Web 部署?
可以通过转到 “程序和功能 ”控制面板并在已安装的程序列表中查找 Microsoft Web Deploy 4.0 来验证是否已安装 Web 部署。 如果不存在,可以从官方下载页下载并安装它。 还应确保 Web 部署代理服务 (MsDepSvc) 正在运行。
是否安装了 Web 部署处理程序?
如果已安装 Web 部署,但仍收到此错误,请确保 已安装 Web 部署中的 IIS 部署处理程序 功能。 在“程序和功能”控制面板中,找到Microsoft Web 部署 4.0,右键单击它并选择“更改”。 在出现的向导中,在第一页上选择“ 下一步 ”,然后在第二页上选择“ 更改 ”。 添加 IIS 部署处理程序 及其下的所有内容。
选择“下一步”以完成向导。 进行此更改后,需要重启 Web 管理服务。
(401) 未经授权
正确配置 Web 部署和 Web 管理服务后,需要设置委派规则以允许用户更新内容。 对于权限问题,你可能会在 Visual Studio 中看到几个不同的错误。 例如:
Web deployment task failed.(Connected to the destination computer ("deployserver")
using the Web Management Service, but could not authorize.
Make sure that you are using the correct user name and password, that the site you are connecting
to exists, and that the credentials represent a user who has permissions to access the site.
Make sure the site name, user name, and password are correct. If the issue is not resolved,
please contact your local or server administrator.
Error details:
Connected to the destination computer ("deployserver") using the Web Management Service,
but could not authorize. Make sure that you are using the correct user name and password,
that the site you are connecting to exists, and that the credentials represent a user who
has permissions to access the site.
The remote server returned an error: (401) Unauthorized.
在 WMSvc 日志中,可以看到以下消息:
2011-05-12 15:50:12 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 - 192.168.0.203 - 401 2 5 1653
2011-05-12 15:50:12 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 user1 192.168.0.203 - 401 1 1326 124
Visual Studio 输出中突出显示的 http 状态是“拒绝访问”错误。 错误日志中突出显示的 Win32 状态映射到“登录失败:未知用户名或密码错误”,因此此错误是一个简单的登录失败。 如果用户已经过身份验证,但没有发布所需的权限,则日志条目如下所示:
2011-05-12 15:55:38 192.168.0.211 POST /msdeploy.axd site=default%20web%20site 8172 - 192.168.0.203 - 401 2 5 0
若要允许此用户发布,需要根据“配置 Web 部署处理程序”中的说明设置委派。
操作未获授权
如果帐户能够登录但尚未授予发布内容所需的权限,则会看到以下错误消息:
Web deployment task failed. (Unable to perform the operation ("Create Directory") for the specified
directory ("bin"). This can occur if the server administrator has not authorized this operation for
the user credentials you are using.
日志 WMSvc
显示这些请求的 HTTP 200 响应。 幸运的是,Web 部署 2.1 还会将信息写入 Microsoft Web 部署服务日志。 若要查看它,请选择事件查看器(本地)>应用程序和服务日志>Microsoft Web 部署。
对于此特定错误,事件日志包含额外详细信息(为简洁起见截断):
User: DEPLOYSERVER\User1
Client IP: 192.168.0.203
Content-Type: application/msdeploy
Version: 8.0.0.0
MSDeploy.VersionMin: 7.1.600.0
MSDeploy.VersionMax: 7.1.1070.1
MSDeploy.Method: Sync
MSDeploy.RequestId: 50de0746-f10d-4640-9b3d-4ba773520e38
MSDeploy.RequestCulture: en-US
MSDeploy.RequestUICulture: en-US
Skip: objectName="^configProtectedData$"
Provider: auto, Path:
Tracing deployment agent exception. Request ID '50de0746-f10d-4640-9b3d-4ba773520e38'. Request Timestamp: '5/12/2011 9:18:12 AM'. Error Details:
Microsoft.Web.Deployment.DeploymentDetailedUnauthorizedAccessException: Unable to perform the operation ("Create Directory")
for the specified directory ("C:\inetpub\wwwroot\bin"). This can occur if the server administrator has not authorized this
operation for the user credentials you are using.
---> Microsoft.Web.Deployment.DeploymentException: The error code was 0x80070005. ---> System.UnauthorizedAccessException:
Access to the path 'C:\inetpub\wwwroot\bin' is denied.
at Microsoft.Web.Deployment.Win32Native.RaiseIOExceptionFromErrorCode(Win32ErrorCode errorCode, String maybeFullPath)
at Microsoft.Web.Deployment.DirectoryEx.CreateDirectory(String path)
at Microsoft.Web.Deployment.DirPathProvider.CreateDirectory(String fullPath, DeploymentObject source)
at Microsoft.Web.Deployment.DirPathProvider.Add(DeploymentObject source, Boolean whatIf)
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
此消息告知需要为此特定错误授予权限的位置。 Visual Studio 中还可能出现以下权限错误:
Web deployment task failed.((5/12/2011 11:31:41 AM) An error occurred when the request was processed on the remote computer.)
(5/12/2011 11:31:41 AM) An error occurred when the request was processed on the remote computer.
The server experienced an issue processing the request. Contact the server administrator for more information.
此特定错误不会带来很多问题,但如果在事件查看器中查看 Web 部署错误日志,图片会更加清晰。
User: DEPLOYSERVER\User1
Client IP: 192.168.0.203
Content-Type: application/msdeploy
Version: 8.0.0.0
MSDeploy.VersionMin: 7.1.600.0
MSDeploy.VersionMax: 7.1.1070.1
MSDeploy.Method: Sync
MSDeploy.RequestId: 63b2f3d1-1817-444f-8280-9fa4f6f85d53
MSDeploy.RequestCulture: en-US
MSDeploy.RequestUICulture: en-US
Skip: objectName="^configProtectedData$"
Provider: auto, Path:
Tracing deployment agent exception. Request ID '63b2f3d1-1817-444f-8280-9fa4f6f85d53'. Request Timestamp: '5/12/2011 9:31:41 AM'. Error Details:
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
at System.Security.AccessControl.Win32.SetSecurityInfo(ResourceType type, String name, SafeHandle handle, SecurityInfos securityInformation, SecurityIdentifier owner, SecurityIdentifier group, GenericAcl sacl, GenericAcl dacl)
at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, SafeHandle handle, AccessControlSections includeSections, Object exceptionContext)
at System.Security.AccessControl.NativeObjectSecurity.Persist(String name, AccessControlSections includeSections, Object exceptionContext)
at Microsoft.Web.Deployment.FileSystemSecurityEx.Persist(String path)
at Microsoft.Web.Deployment.SetAclProvider.Add(DeploymentObject source, Boolean whatIf)
at Microsoft.Web.Deployment.DeploymentObject.Update(DeploymentObject source, DeploymentSyncContext syncContext)
at Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject, DeploymentObject sourceObject)
at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject)
在此输出中 User1
,可以看到没有设置安全信息的权限。 在这种情况下,用户对内容没有“修改权限”。 向内容授予“更改权限”即可解决问题。
其他
如果成功发布后无法浏览 .NET 4.0 应用程序,可能是 .NET 4.0 未正确注册到 IIS。 其他症状包括 .NET 4.0 已安装,但 IIS 中没有 .NET 4.0 应用程序池或处理程序映射。 在安装 IIS 之前安装 .NET 4.0 时,会出现此症状。 若要解决此问题,请启动提升的命令提示符并运行以下命令:
%systemdrive%\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -iru