首頁 > 軟體

部署ASP.NET Core程式到Windows系統

2022-03-20 22:01:01

一、建立專案

本篇文章介紹如何將一個ASP.NET Core Web程式部署到Windows系統上。這裡以ASP.NET Core WebApi為例進行講解。首先建立一個ASP.NET Core WebApi專案,使用預設的Values控制器,這裡使用Visual Studio 2019建立一個ASP.NET Core 3.1d的WebApi專案。

建立新專案的時候選項ASP.NET Core Web應用程式,如下圖所示:

設定新專案介面介面設定專案名稱和位置,如下圖所示:

選擇.Net Core框架下面的ASP.NET Core 3.1,建立一個API專案,不勾選“為HTTPS設定”,如下圖所示:

這樣就建立好了一個Web Api專案,我們存取專案:

瀏覽器裡面可以正常存取,說明我們建立的專案沒有問題,接下來我們就把這個專案部署到windows系統上面。

二、釋出專案

我們在上面建立了一個Web Api專案,下面先發布專案。ASP.NET Core專案有兩種釋出部署模式,下面分分進行講解。

1、框架依賴

框架依賴(FDD):即Framework-dependent deployments的縮寫。這種釋出方式依賴於Framework框架,即要部署的伺服器上面必須按照ASP.NET Core 執行時環境(ASP.NET Core Runtime)。這種部署方式是微軟預設推薦的。下面我們看看如何使用框架依賴進行部署。

我們在專案上面右鍵選擇“釋出”:

釋出目標選擇釋出到資料夾,將檔案發布到FDD資料夾,然後點選“高階”:

在釋出介面,部署模式選擇框架依賴,目標執行時選擇預設的可移植:

我們看到目標執行時下面有好多選項,這裡選擇“可移植”,表示編譯後的檔案可以部署到windows平臺、Max平臺、Linux平臺。如果只想部署到某一個平臺,那麼可以選擇具體的一個平臺。比如只想部署到Linux系統的x64架構,那麼選擇“linux-x64”即可。

最後點選“儲存”按鈕,然後釋出即可:

這樣就使用FDD方式釋出成功了。我們看看釋出後的檔案:

可以看到,框架依賴方式釋出後的檔案很少。

2、獨立部署

獨立(SCD):即Self-contained deployments的縮寫。這種方式表示獨立提供執行時環境,即要部署的伺服器上面不需要安裝ASP.NET Core執行時環境即可部署。由於不需要預先安裝執行時環境,所以這種釋出方式編譯後的檔案大小會比框架依賴方式編譯後的檔案大小大。在釋出的時候,部署模式選擇獨立即可:

這時候目標執行時就沒有可移植選項了,由於我們要在windows系統上面部署,所以這裡選擇win-x64。最後儲存釋出即可。釋出完成以後,我們在看看釋出後的檔案:

可以看到,釋出後的檔案很多,這時因為釋出的時候有一些程式執行需要使用的dll資料夾會打包進來。

三、部署

1、設定部署環境

我們在上面的步驟中,已經把程式釋出到資料夾了,下面進行部署。我們先演示如何使用FCD模式進行部署。FCD模式需要依賴於Framework框架,由於我們只是部署,所以只需要安裝ASP.NET Core Runtime即可,不需要安裝SDK。我們首先需要在伺服器上面安裝ASP.NET Core runtime,去微軟官網下載相應版本進行安裝即可,這裡選擇ASP.NET Core Runtime 3.1:

這裡選擇下載Hosting Bundle。因為Hosting Bundle包括了.Net Core執行時和IIS支援。

下載完成以後,雙擊exe檔案即可進行安裝:

安裝完成以後我們在命令列裡面輸入下面的命令,檢查是否安裝成功:

dotnet --info

如下圖所示:

可以看到提示我們已經安裝了.NET Core runtimes環境,沒有安裝SDK。

由於我們需要部署到IIS上面,所以安裝完以後要重啟電腦,或者使用下面的命令列重啟IIS服務:

net stop was /y
net start w3svc

如下圖所示:

注意:要以管理員身份執行命令列,否則會報拒絕存取的錯誤

還可以管理伺服器裡面重啟啟動IIS,如下圖所示:

2、控制檯方式部署

我們先使用控制檯的方式進行部署。進入釋出後的路徑,執行下面的命令,以命令列的方式進行啟動:

dotnet dll檔名稱

如下圖所示:

可以看到專案已經啟動了,正在監聽5000埠,我們在瀏覽器裡面存取下面的url地址:http://localhost:5000/weatherforecast

可以看到能夠正常返回資訊。

這裡測試的時候是在Windows伺服器上部署的,如果是在個人電腦上面部署,在瀏覽器裡面瀏覽的時候會直接在web頁面裡面顯示。

我們是把程式部署到了伺服器上面,在伺服器上面可以瀏覽,那麼在遠端電腦上面能不能瀏覽呢?我們在遠端電腦上面瀏覽:

可以看到拒絕我們的存取,這是為什麼呢?因為監聽的IP地址是localhost,如果想要遠端電腦可以存取,還需要使用urls引數進行設定:

這裡使用了*號,表示任意網址都可以存取,我們再次存取:

這次我們就可以存取了。使用urls引數還可以指定存取的埠號,比如我們想監聽8090埠,就可以使用下面的命令:

dotnet AspNetCoreDeployDemo.dll  --urls http://*:8090

直接以控制檯的方式部署程式,一般適合於我們自己開發偵錯程式,真實的生產環境中,不建議使用這種方式。這種方式是Kestrel伺服器直接處理HTTP請求,在windows系統中,我們一般是把ASP.NET Core 程式部署在IIS上面,IIS作為反向代理伺服器使用。下面我們看看如何部署到IIS上。

3、部署到IIS

在傳統的.NET Framework中,ASP.NET程式釋出到IIS上面,是由IIS的工作程序(w3wp.exe)託管的,在工作管理員中可以找到該程序。在ASP.NET Core程式中不再是由IIS工作程序託管,而是使用自託管Web伺服器(Kestrel)執行,IIS則是作為反向代理的角色轉發請求到Kestrel不同埠的ASP.NET Core程式中,然後將接收到的請求推播至中介軟體管道中,處理完請求後在將HTTP響應資料重新回寫到IIS中,最終通過IIS轉達到不同的使用者端。在這過程中,最重要的角色便是AspNetCoreModuleV2(asp.net core 2.0以前版本中是AspNetCoreModuleV2,asp.net core 2.x版本是AspNetCoreModule,從3.0開始又改回了AspNetCoreModuleV2),它是IIS中的一個模組,HTTP請求進入到IIS之後便立即由它轉發,並迅速重定向到ASP.NET Core專案中。因為IIS只是作為反向代理負責轉發請求,不負責監聽HTTP請求埠,所以不需要使用應用程式池來託管我們的程式碼。

電腦上面安裝好了asp.net core 執行時以後,在IIS的模組裡面會有AspNetCoreModule:

雙擊“模組”,檢視裡面是否有AspNetCoreModule模組:

接下來在IIS裡面新增網站,如下圖所示:

最後點選“確定”按鈕,網站及部署完成。我們在瀏覽器裡面進行瀏覽:

這樣就可以存取了。

在ASP.NET Core 3.x以前版本中,部署完網站之後,我們還需要設定應用程式池,將.NET CLR版本設定為“無受控程式碼”,在ASP.NET Core 3.x開始的版本中,無需在設定應用程式池,部署完網站之後就可以直接存取了。我們也可以設定應用程式池為“無受控程式碼”,如下圖所示:

4、獨立部署

上面的兩種部署方式都是基於框架依賴釋出後的檔案進行部署的,我們在看看如何使用獨立部署釋出後的檔案進行部署,我們看到釋出後有一個exe檔案:

我們雙擊該exe檔案,會看到直接以控制檯的方式啟動:

這時可以在瀏覽器裡面進行存取了。這樣就可以部署了,真實生產中不建議使用這種方式。

到此這篇關於部署ASP.NET Core程式到Windows系統的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com