在以往發布項目的時候,都是將文件復制粘貼到站點目錄,或者通過ftp上傳到站點目錄,現在隨着持續集成、自動化運維、自動化發布的出現,發布項目也在日新月異。
本文介紹,如何通過 vs 2019 遠程發布到遠程 iis 站點下。
遠程服務器系統:Windows Server 2019 64 位
服務器配置
1.添加 iis,安裝 .net 框架(略)
2.下載安裝 Web Deploy
Web Deploy 可以用於本地和遠程部署Web項目,地址:https://www.iis.net/downloads/microsoft/web-deploy
在安裝的時候,選擇“完整”安裝,安裝完成后,會在服務中看到“Web Management Service”服務,如下圖:
如果未安裝,在遠程發布的時候,vs 會報錯如下:
---------------------------
Microsoft Visual Studio
---------------------------
未能連接到遠程計算機(“xx”)。請確保在遠程計算機上安裝了 Web Deploy 並啟動了所需的進程(“Web Management Service”)。 在以下位置了解更多信息: https://go.microsoft.com/fwlink/ ... ATION_NOT_REACHABLE。 無法連接到遠程服務器
---------------------------
確定
---------------------------
3.安裝“IIS 管理腳本和工具”
轉到“選擇服務器角色” > “Web 服務器(IIS)” > “管理工具”,然后選擇“IIS 管理腳本和工具”角色,點擊“下一步”,然后安裝角色 。
4.IIS 啟用遠程連接
在 IIS 找到管理服務,啟用遠程連接,如下圖:
(備注:在防火牆和安全組要開放8172入站端口)
5.新建 IIS 站點
新建一個名稱為 test1 的站點,如下圖:
6.IIS 添加管理用戶
添加 IIS 管理器用戶,如下圖:
同時,在 test1 站點,添加授權,如下圖:
如果未添加授權,在遠程發布的時候,會報錯如下:
---------------------------
Microsoft Visual Studio
---------------------------
已使用 Web 管理服務連接到遠程計算機(“xxx”),但未能授權。請確保你使用了正確的用戶名和密碼、你連接的站點已存在並且憑據代表的用戶有權訪問該站點。 在以下位置了解更多信息: https://go.microsoft.com/fwlink/ ... R_USER_UNAUTHORIZED。 遠程服務器返回錯誤: (401) 未經授權。
---------------------------
確定
---------------------------
發布 ASP.NET MVC 項目
首先,使用 vs 2019 新建一個 .NET 4.6.2 的 asp.net mvc 項目,名稱為:WebAutomatedDeployment,
再新建兩個類庫,網站程序同時引用這2個類庫。(新建和引用2個類庫,原因是模擬更接近正式的項目)
嘗試啟動項目,如下圖:
右擊項目,選擇發布,web服務器(iis)->web部署,填寫服務器信息,如下圖:
驗證連接,測試通過,如下圖:
嘗試發布的時候,報錯如下:
Web 部署任務失敗。((2020/10/9 11:34:38)在遠程計算機上處理請求時出錯。)
(2020/10/9 11:34:38)在遠程計算機上處理請求時出錯。
服務器在處理請求時遇到問題。請與服務器管理員聯系以了解詳細信息。 WebAutomatedDeployment 0
可以通過服務器事件查看器查看具體的錯誤,如下圖:
User: itsvse
Client IP: xxx
Content-Type: application/msdeploy
Version: 9.0.0.0
MSDeploy.VersionMin: 7.1.600.0
MSDeploy.VersionMax: 9.0.3802.0
MSDeploy.Method: Sync
MSDeploy.RequestId: def8d9f7-1a72-4b19-8b75-919f8c6a9604
MSDeploy.RequestCulture: zh-CN
MSDeploy.RequestUICulture: zh-CN
ServerVersion: 9.0.1973.0
Skip: objectName="^configProtectedData$"
Provider: auto, Path:
發生了傳播到客戶端的跟蹤部署代理異常。請求 ID“def8d9f7-1a72-4b19-8b75-919f8c6a9604”,請求時間戳:“2020/10/9 11:51:29”。錯誤詳細信息:
System.UnauthorizedAccessException: 嘗試執行未經授權的操作。
在 System.Security.AccessControl.Win32.SetSecurityInfo(ResourceType type, String name, SafeHandle handle, SecurityInfos securityInformation, SecurityIdentifier owner, SecurityIdentifier group, GenericAcl sacl, GenericAcl dacl)
在 System.Security.AccessControl.NativeObjectSecurity.Persist(String name, SafeHandle handle, AccessControlSections includeSections, Object exceptionContext)
在 System.Security.AccessControl.NativeObjectSecurity.Persist(String name, AccessControlSections includeSections, Object exceptionContext)
在 Microsoft.Web.Deployment.FileSystemSecurityEx.Persist(String path, Boolean isFile)
在 Microsoft.Web.Deployment.SetAclProvider.Add(DeploymentObject source, Boolean whatIf)
在 Microsoft.Web.Deployment.DeploymentObject.Update(DeploymentObject source, DeploymentSyncContext syncContext)
在 Microsoft.Web.Deployment.DeploymentSyncContext.HandleUpdate(DeploymentObject destObject, DeploymentObject sourceObject)
在 Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
在 Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject)
在 Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, ContentRootTable contentRootTable, Nullable`1 syncPassId, String syncSessionId)
在 Microsoft.Web.Deployment.DeploymentAgent.HandleSync(DeploymentAgentAsyncData asyncData, Nullable`1 passId, String user, String siteName)
在 Microsoft.Web.Deployment.DeploymentAgent.HandleRequestWorker(DeploymentAgentAsyncData asyncData)
在 Microsoft.Web.Deployment.DeploymentAgent.HandleRequest(DeploymentAgentAsyncData asyncData)
解決方案:
重新啟動 vs 工具,點擊發布,會彈出如下圖:
勾選“為Visual Studia的將來會話保存此證書”即可解決。
第一次發布的時候,比較慢,因為需要將全部的文件上傳到服務器,如下圖:
嘗試修改 Index.cshtml 頁面文件,點擊重新發布,只會更新如下3個文件,如下圖:
刷新網站,發現已經更新,如下圖:
最后,附上個人閱讀量超1200萬的博客:https://www.itsvse.com/blog_xzz.html
(完)