Web Deploy 发布网站错误 检查授权和委派设置

Web Deploy发布ASP.NET网站给我们提供方便,配置好后可以很方便地发布网站到IIS服务器
自安装Web Deploy一年以来,一直都用得好好地。
直到最近,Gitlab-CI自动发布出了问题,提示:

"C:\Tools\GitLab-Runner\builds\d1af4d14\0\WP\Hallhuber\src\WP.Web.Mvc\1621.WP.Web.Mvc.csproj" (default target) (1) ->
(MSDeployPublish target) ->
  C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4295,5): msdeploy error ERROR_USER_UNAUTHORIZED: Web deployment task failed. (Connected to the remote computer ("192.168.70.62") 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.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.) [C:\Tools\GitLab-Runner\builds\d1af4d14\0\WP\Hallhuber\src\WP.Web.Mvc\1621.WP.Web.Mvc.csproj]

    17 Warning(s)
    1 Error(s)

Time Elapsed 00:00:43.96
Publish completed.
ERROR: Job failed: exit status 1

如图:

我在 Visual Studio 上手动发布该Web项目,点发布时,弹出了"请输入密码以连接到 Web Deploy 客户端"提示框。

我输入密码后,可以成功发布。
我感觉有点奇怪,为什么 Visual Studio 可以正常发布,而 Gitlab-CI 却发布失败,而且 Visual Studio 竟然要输入密码才能发布,我明明把密码写进pubxml发布配置文件里了。
此时我没有多想,我尝试以bat发布命令脚本形式发布Web项目,竟然发布失败了,和 Gitlab-CI 一样地提示"ERROR_USER_UNAUTHORIZED"

于是,上Bing国际版加上site:stackoverflow.com指令搜索·stackoverflow网站·上的解决方案:
有人说是要在发布命令脚本中多加两个参数/p:UserName=YourName /p:Password=YourPassword,这个我试过,不行。
有人说要使用Windows本地非管理员账户而不是IIS虚拟账户来发布,我创建了一个本地账户,管理员身份和非管理员身份都试过,也不行。
有人说是 Web Deploy 没有完整安装所致:
这里我很纳闷,因为我之前第一次安装 Web Deploy 就是完整安装模式,但安装完后,"Web Deployment Agent Service"服务起不来。
当时没有当一回事,有一次重启Windows 服务器,发现Nginx 服务器起不来了,经过一系列排查,有个叫MsDepSvc的进程占用了80端口,而MsDepSvc进程其实就是"Web Deployment Agent Service"服务。
当时很是气恼又感觉"Web Deployment Agent Service"服务没有什么卵用,想要卸掉它。所以在重新安装 Web Deploy 的时候,选择自定义安装,并且取消勾选"Remote Agent Service"的安装选项,之后一直在愉快的玩 Gitlab-CI
现在又让我装回去?好吧,只好找一找有没有能够让"Web Deployment Agent Service"服务不占用80端口,又能正常运行与Nginx服务器的方法。
在这里找到解决方案:https://stackoverflow.com/questions/5867392/can-the-web-deploy-agent-run-on-a-port-other-than-80-on-iis6
心急的我,还没看完这个帖子的所有回复,就开始按照它标记为最佳答案的教程来做。做到一半,发现Windows 服务器不能识别httpcfg命令。
百度才知道在Windows Vista以下的版本支持httpcfg,以上版本不支持httpcfg,改为netsh。也就是说Windows 2008以上的服务器只能用netsh命令而不是httpcfg命令。
认真地看完帖子的所有回复,原来已经有人给出了在Windows 7以上版本的httpcfg命令的替代命令netsh的执行语法。
按照教程:

  1. 停止"Web Deployment Agent Service"服务 (net stop msdepsvc)
  2. 编辑以下注册表值: HKLM\SYSTEM\CurrentControlSet\Services\MsDepSvc\Parameters\ListenUrl
    http://+:80/MsDeployAgentService 改为 http://+:8171/MsDeployAgentService
  3. Windows XP,Windows Server 2003以下服务器运行如下命令:
    httpcfg query urlacl
    httpcfg delete urlacl /u http://+:80/MsDeployAgentService/
    httpcfg set urlacl /u http://+:8171/MsDeployAgentService/ /a D:(A;;GX;;;NS)

    Windows Vista,Windows Server 2008以上服务器运行如下命令:

    netsh http show urlacl
    netsh http delete urlacl url=http://+:80/MSDEPLOYAGENTSERVICE/
    netsh http add urlacl url=http://+:8171/MSDEPLOYAGENTSERVICE/ sddl=D:(A;;GX;;;NS)
  4. 启动"Web Deployment Agent Service"服务 (net start msdepsvc)

依次按照步骤做完后,在 Visual Studio 上执行发布,提示:

Web 部署任务失败。((2018/1/11 星期四 10:29:39)在远程计算机上处理请求时出错。)

(2018/1/11 星期四 10:29:39)在远程计算机上处理请求时出错。
无法执行此操作。请与服务器管理员联系,检查授权和委派设置。

再次搜索解决方案,找到了这个博文:https://www.cnblogs.com/SilenceTom/p/5582932.html
原来,安装完 Web Deploy 后,会在服务器上创建两个本地账户:WDeployConfigWriterWDeployAdmin,而这两个本地账户的密码默认设置为"过一段时间就过期"
因此,给这两个本地账户WDeployConfigWriterWDeployAdmin重设密码,并设置为"永不过期"
然后到IIS管理服务委派(Management Service Delegation)更新所有使用了WDeployConfigWriterWDeployAdmin账户的规则(Rule)凭证信息(即账户密码)

再次在 Visual Studio 上执行发布,顺利发布Web网站IIS服务器上了,并且没有弹出"请输入密码以连接到 Web Deploy 客户端"提示框。
执行bat发布命令脚本,也是顺利发布。
总算搞定。

PS:

运行环境:
GitLab 10
Windows Server 2012
Visual Studio 2015

Web Deploy 安装与配置:
https://docs.microsoft.com/en-us/iis/install/installing-publishing-technologies/installing-and-configuring-web-deploy

Web Deploy 自动备份:
https://docs.microsoft.com/en-us/iis/publish/using-web-deploy/web-deploy-automatic-backups

MS Deploy 发布时包含其它文件:
https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/deploying-extra-files

Web Deploy 下载地址:
https://www.iis.net/downloads/microsoft/web-deploy
直接下载地址:
English: x86 / x64
Chinese (Simplified): x86 / x64

引用与感谢以下链接的人:
https://stackoverflow.com/questions/5867392/can-the-web-deploy-agent-run-on-a-port-other-than-80-on-iis6
https://www.cnblogs.com/SilenceTom/p/5582932.html

原文地址:https://www.cnblogs.com/VAllen/p/Web-Deploy-Failed.html

时间: 2024-08-10 21:28:19

Web Deploy 发布网站错误 检查授权和委派设置的相关文章

Web Deploy发布网站错误 检查授权和委派设置

web Deploy发布asp.net网站给我们提供方便,开始配置好了可以方便的发布网站,但是过久就出现无法执行此操作.请与服务器管理员联系,检查授权和委派设置.花了好长时间找到问问所在.现在解决方法分享出来.希望对大家有点用帮助 ? ? 原来,当您安装网络部署它设置了两个本地帐户WDeployConfigWriter和WDeployAdmin.对这些帐户的密码默认设置为过期.?因此,重设密码的Web服务器上,并设置为"永不过期".?然后去管理服务委派在IIS中.?它在WDeployA

Web Deploy发布网站及常见问题解决方法(图文)

Web Deploy发布网站及常见问题解决方法(图文) Windows2008R2+IIs7.5 +Web Deploy 3.5 Web Deploy 3.5下载安装 http://www.iis.net/downloads/microsoft/web-deploy 点 Install this extension 也可直接点下面链接 http://go.microsoft.com/?linkid=9817356 全部 点下一步进行安装 直至完成, Web Deploy 安装完毕后,便可进行下一

web deploy发布网站各种问题

环境: 服务器:windows server 2012 IIS:8.0 web deploy组件:本身已经带了这个组件,后面我又安装了3.5 VS:2015 发布流程: 在服务器建立站点,绑好域名 VS选择要发布的项目,发布 第一步和发布到文件系统一样,选择配置文件 第二步发布方式选择web deploy,相关配置信息如下 Server:https://YourServerIP:8172/msdeploy.axd(如果服务器开了防火墙记得打开8172端口) Site name:YorSiteNa

Web Deploy发布网站一条龙解决方案

Web Deploy工具对于ASP.NET开发人员来说一定不陌生,没有用过也经常见到,Web Deploy发布十分方便而且在发布时会帮助用户检验发布文件的正确性.接下来介绍一下基础使用. 第一步:安装Web Deploy. 使用之前当然要先安装,安装Web Deploy之前要检查IIS的配置,详情可查看Web Deploy远程部署配置图解,里面讲了IIS的安装和基础配置. 然后在下载安装Web Deploy.有些服务器不允许下载的可以在本地下载后FTP上传到服务器上再安装(机智如我). 安装完成

Visual Studio通过Web Deploy发布网站报错:An error occurred when the request was processed on the remote computer.

这个问题很奇怪,不管我怎么重启服务器和自己的开发机,都没有用. 在网上找了很多资料,有说可以尝试去读Windows的错误日志,然后通过日志找原因-(相见Stackoverflow:http://stackoverflow.com/questions/6939150/web-deployment-task-build-failed) 最终,我决定先卸载Web Deploy,然后按照此前我写的文章(http://www.cnblogs.com/Richeir/p/5371802.html),重新部署

VS使用WEB DEPLOY发布

背景是这样的,公司有两台服务器,平时一台备用,另一台做为主生产机器.当有大量补丁或者安装什么东西需要重启的时候,交其中一台直接关掉IIS,然后重启即可,此时另一台负责处理用户请求. 之前一台服务器一个网站的时候,发布都是远程上去,然后复制开发机器pubish目录下的文件过去.这种情况有几个弊端: 每次复制过去的文件量巨大. web.config难以把控,虽然使用Release和Debug来控制连接字符串,但是,必然不如web.config来得正规. 每次要登陆远程机器,有时候剪切板无法共享,需要

vs 2015 web Deploy发布

以前一直发布网站或者管理系统的时候总是喜欢将文件拷贝到服务器上,然后再进行安装,今天心血来潮,研究了下web deploy的一个发布流程: 1.安装iis(我服务器上已经安装完成) 2.下载WebDeploy_amd64_en-US 我选择的是中文版本的,下载地址(https://www.microsoft.com/zh-CN/download/details.aspx?id=43717) 3.配置vs2015  测试配置信息是否成功!没成功检查一遍问题!

IIS支持web deploy发布

在windows server上确保IIS安装了[WebDAV发布]与[管理服务]这两个功能. web platform installer 安装web deploy 3.5(不要安装web deploy 3.6,我在使用window server 2016测试时,同时安装会报错) 打开Management Service后,勾选“Enable Remote connections”.如果你的对话框是灰色不可用的,那你得先停止“Web Management Service”这项服务(WMSvc)

ASP.NET Web Deploy 发布项目二次开发发布编译出错原因

原先的ASP.NET 转换为 Web Deploy 项目后, 将所有的.CS文件打成一个包, 页面aspx文件保留, 项目开发人员拿到之后, 进行build, 开发没有问题, 但是publish WebSite的时候, 会出错. 错误:  Publication (web): 未将对象引用设置到对象的实例. 没有任何其他相关信息 , 打开aspnet_compiler.exe 的errorstack 选项后, 发现报错堆栈: error ASPRUNTIME: 未将对象引用设置到对象的实例. [