本方案是針對Windows server+IIS7 +asp.net core 2.1的部署方案。當然asp.net core項目一樣可部署到其它OS上,還有Durck或Azure 或OpsDev上。如果Linux上,通過Kestrel代理,如果應用使用 Kestrel 服務器,Nginx、Apache 或 IIS 可用作反向代理服務器。 反向代理服務器接收來自 Internet 的 HTTP 請求,並將這些請求轉發到 Kestrel。
Asp.net core 項目有三種發布和運行部署方式:
1、依賴框架的部署。 顧名思義,依賴框架的部署 (FDD) 依賴目標系統上存在共享系統級版本的 .NET Core。 由於已存在 .NET Core,因此應用在 .NET Core 安裝程序間也是可移植的。 應用僅包含其自己的代碼和任何位於 .NET Core 庫外的第三方依賴項。 FDD 包含可通過在命令行中使用 dotnet 實用程序啟動的 .dll 文件。 例如,dotnet app.dll 就可以運行一個名為 app 的應用程序。
2、獨立部署。 與 FDD 不同,獨立部署 (SCD) 不依賴目標系統上存在的共享組件。 所有組件(包括 .NET Core 庫和 .NET Core 運行時)都包含在應用程序中,並且獨立於其他 .NET Core 應用程序。 SCD 包括一個可執行文件(如 Windows 平台上名為 app 的應用程序的 app.exe),它是特定於平台的 .NET Core 主機的重命名版本,還包括一個 .dll 文件(如 app.dll),而它是實際的應用程序。
3、依賴框架的可執行文件。 生成在目標平台上運行的可執行文件。 類似於 FDD,依賴框架的可執行文件 (FDE) 是特定於平台的,而不是自包含的。 這些部署的運行仍依賴於現有的 .NET Core 共享系統級版本。 與 SCD 不同,應用僅包含代碼和任何位於 .NET Core 庫外的第三方依賴項。 FDE 生成在目標平台上運行的可執行文件。
基於Windows server+IIS7 +asp.net core 2.1的發部和部署方案過程如下:
IIS的安裝與配置與asp.net 應用程序相同,就不再介紹 。
1、應用程序配置
2安裝.NET CORE運行時。
3、安裝.net core庫
4、發布Web Api
5、配置站點
6、常見問題
一、應用程序配置
因為前后端分離,前端不需要.net core支持,部分使用Razor頁面默認asp.net就可以了。所以下配置都是針對Web Api項目。
1、Program.cs
Program.cs 調用 CreateDefaultBuilder 以開始設置主機:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
CreateDefaultBuilder 將 Kestrel 服務器配置為 Web 服務器,並通過配置 ASP.NET Core 模塊的基礎路徑和端口來啟用 IIS 集成。
2、Web.Config配置
此文件在項目中找不到,一般會在發布時自動生成。
重點是配置正確的processPath 。
processPath 是.Net Core的安裝程序路徑,一般默認就可以了。
stdoutLogEnabled表示應用程序是否生成日志,通過它可以查看異常情況。
stdoutLogFile是日志文件路徑,Logs目錄默認沒有,要手工在應用程序根目錄下創建。
二、 安裝.net core運行時和.net 庫
在托管系統(本介紹為Windows)上安裝 .NET Core 托管捆綁包。 捆綁包可安裝 .NET Core 運行時、.NET Core 庫和 ASP.NET Core 模塊。最新托管捆綁包下載地址
https://dotnet.microsoft.com/download/thank-you/dotnet-runtime-2.2.2-windows-hosting-bundle-installer。.net,下載后會有.NET Core 2.2 Runtime & Hosting Bundle for Windows 兩個文件,注意對應Window是64位還是32位系統 。 core庫版本應和VS開發時的版本相同,本人項目用的VS2017 ,.net core2.0,
所以安裝2.0或更高版本。
安裝之后要重啟服務1)停止windows進和激活服務 :net stop was /y 2 )重啟web發布服務 : net start w3svc 3)重啟IIS: iisrest . 否則會出現 Http Error 502.5 - Process Failure 錯誤。
三、 發布Web Api項目
1、 發布前要配置項目生成屬性“生成XML文檔文件”;
2、 如果有引用的下層.net core程序集也要配置生成XML文檔文件;
3、 將項目選擇為Release模式(開發編譯時用的Debug模式)。
4、 cmd進入命令行(注意要在管理員權限下運行CMD),轉向Web Api 應用程序所在的目錄。我的是 D:\Workspace\do\WebPai
5、 在命令行執行 dotnet publish -c release 。
6、發布完成
黃色提示不用管,這是編寫代碼習慣造成問題,不是錯誤,可以正常通過。發布的文件默認在目錄bin\release\netcoreapp2.0 下。將目錄下的所有文件拷貝到服務器IIS站點的目錄下。
四、IIS中配置站點
1、添加站點
端口可以自己定一個,我用的是8086.站點是http://localhost:8086
2、配置應用程序池
至此,asp.net core web api 應用程序完美發布與部署,跑起來試試,一切OK。
五、常見問題:
1 》返回500。這首先考慮是應用程序有誤。
原因:
1、Program.cs沒配置BuildWebHost
見第一步。
2、項目屬性沒有生成xml文檔
這是引於 Swagger 自動生成幫助時必需要選中的。
2 》 Http Error 502.5 - Process Failure
原因是安裝捆綁托管包后 沒有重啟 WAS W3SVC
3 》 An error occurred while starting the application.
原因是版本沒對應。我用的開發版本是asp.net2.0,所以要安裝 2.0或以上版本。
更詳細的說明可參見:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.1&tabs=aspnetcore2x
————————————————
原文鏈接:https://blog.csdn.net/lixuezhi/article/details/88367742