【實戰】使用 VS 2019 將項目發布到遠程 IIS 服務器


在以往發布項目的時候,都是將文件復制粘貼到站點目錄,或者通過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

(完)


免責聲明!

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



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