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)
  1. 啟動"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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM