ASP.NET Core托管模型CreateDefaultBuilder()方法
讓我們討論一下 CreateDefaultBuilder() 方法究竟對配置和設置 Web 服務器的作用。從托管的角度來看,一個ASP.NET Web 應用程序可以通過兩種方式托管,即進程托管(InProcess)或進程外托管(OutOfProcess)。
註:當我們使用任何模板創建新 ASP.NET Core Web 應用程序時,默認情況下,使用InProcess 托管創建項目文件,該托管用於在 IIS 或 IIS Express 方案中托管應用程序。
如何驗證是否在進程內?
為瞭驗證上面的觀點,打開項目屬性。右鍵單擊項目,然後從上下文菜單中選擇屬性選項。打開屬性窗口後,選擇"調試"並查看"托管模型"下拉列表的值,如下圖所示。下拉列表包含三個值,即默認值(進程內)、進程內和進程外。
那麼, 確認默認情況下它使用"進程中"托管模型。
如何在ASP.NET Core中配置InProcess托管?
要為 ASP.NET Core Web 應用程序配置 InProcess 托管,隻有一個簡單的設置,隻需將 元素添加到值為InProcess 的應用程序項目文件中。為此,隻需從解決方案資源管理器右鍵單擊應用程序,然後單擊上下文菜單中的"編輯項目文件"選項,如下代碼所示。
打開應用程序項目文件後,請對其進行修改,如下所示。此處添加元素並將其值設置為 InProcess。該節點也可以是OutOfProcess。
將托管模型設置為 InProcess 時會發生什麼?
在 InProcess 托管的情況下(即當 CreateDefaultBuilder() 將值視為項目文件中 AspNetCoreHostingModel 元素的 InProcess 時),場景後面的 CreateDefaultBuilder() 方法內部調用 UseIIS() 方法。然後在 IIS 工作程序(即 iIS 的 w3wp.exe 和 Iisxpress.exe 的 IISExpress)中托管應用程序。
從性能的角度來看,InProcess 托管模型提供的請求吞吐量明顯高於 OutOfProcess 托管模型。
在 IIS 中,將用於執行應用程序的進程名稱是 w3wp。同樣,如果是 IIS Express,則進程名稱將是 iisexpress。
如何確定是否在InProcess進程下執行?
默認情況下, 如果您要運行該應用程序,那麼您將在瀏覽器中看到以下 “Hello World!” 輸出。
下面, 標記瞭輸出“Hello World”位置的代碼片段, 位於Startup類的Configure()方法中, 如下所示。
為瞭確認該應用程序是在InProcess進程下執行, 將"Hello World!" 修改為顯示當前的進程名稱, 通過調用: System.Diagnostics.Process.GetCurrentProcess().ProcessName獲取當前的進程名稱, 如下所示。
再次啟動程序, 將在瀏覽器中顯示以下信息, 如下所示。
這是因為默認情況下,Visual Studio 在運行應用程序時使用 IISExpress,如下圖所示。
什麼是 IIS Express?
IIS Express 是 IIS 的輕量級自包含版本。它針對 Web 應用程序開發進行瞭優化。您需要記住的最重要的一點是,我們僅在開發中使用 IIS Express,而不是生產。在生產中,我們通常使用 IIS。
為什麼InProcess比OutOfProcess提供更好的性能?
在進程外(OutOfProcess)托管的情況下,有 2 臺 Web 服務器
一個內部 Web 服務器一個外部 Web 服務器。
內部 Web 服務器稱為Kestrel,外部Web 服務器可以是IIS、Nginx****或 Apache。使用 InProcess 托管模型時,隻有一個Web 服務器,即 IIS。因此,對於 InProcess 托管模型,我們在內部和外部 Web 服務器之間導航請求沒有性能損失。這就是 InProcess 托管模型提供比 OutOfProcess 托管模型更高的請求吞吐量的原因。
InProcess Hosting(進程托管)
在上面的內容講到, 我們可以通過右鍵選擇屬性, 更改應用程序的托管模型, 也可以通過右鍵編輯項目文件編輯節點來設置, 如下所示。
在ASP.NET Core中,使用 Inprocess 托管模型,我們的應用程序將在 IIS 工作程序中托管。最重要的一點,需要記住的是,我們隻有一個Web服務器,即 IIS服務器的情況下,InProcess托管,這將托管我們的應用程序,如下圖所示。
什麼是Kestrel Web 服務器?
ASP.NET Core是一個跨平臺框架。 這意味著它支持在不同類型的操作系統(例如Windows,Linux或Mac)上開發和運行應用程序。
Kestrel是ASP.NET Core應用程序的跨平臺Web服務器。 這意味著該服務器支持ASP.NET Core支持的所有平臺和版本。 默認情況下,它包含在.NET Core應用程序中作為內部Web服務器。
Kestrel Web服務器通常用作邊緣服務器,即面向Internet的Web服務器,它直接處理來自客戶端的傳入HTTP請求。 對於Kestrel Web服務器,用於承載和運行ASP.NET Core應用程序的進程名稱是項目名稱。
如何使用 Kestrel Web 服務器運行應用程序?
在使用 Kestrel 服務器運行應用程序之前,讓我們首先打開應用程序的屬性文件夾中的launchSettings.json文件。打開launchSettings.json 文件後,默認情況下,您將找到以下代碼。
在這裡,您可以看到,我們有兩個部分。 一種用於IIS Express(IIS服務器),另一種用於Kestrel服務器。 在Visual Studio中,您可以找到上述兩個配置文件(IIS Express和FirstCoreWebApplication),如下所示。
如果選擇 IIS Express,則它將使用 IIS 服務器,如果您選擇 FirstCoreWeb 應用程序,則它將使用 Kestrel 服務器。
使用 IIS Express 運行應用程序:
如果您使用 IIS Express 運行應用程序,則它將使用啟動設置.json 文件中提及的 URL 和端口號。若要證明這使用 IIS Express 運行應用程序,請參閱如下所示的輸出(左邊是配置文件、右邊是瀏覽器輸出)。
使用 Kestrel 服務器運行應用程序:
為瞭使用 Kestrel 服務器在 Visual Studio 中運行應用程序,首先,您需要修改你的啟動方式為你當前的應用程序名稱,如下所示。
選擇 應用程序方式啟動後,現在運行該應用程序。在這裡,我們需要觀察兩件事。首先,它將啟動命令提示符並使用 Kestrel 服務器托管應用程序,如下所示。在這裡,您需要關註 URL 和端口號,並且應該是launchSettings.json文件的WebApplication4(這裡根據您實際的程序名稱顯示)配置文件中提到的URL和端口號。
請參閱如下所示的輸出(左邊是配置文件、右邊是瀏覽器輸出以及打開的.NETCLI輸出窗口)。
註:在這個的示例中,對於 IIS Express,端口號為 12166,輔助進程為 iisexpress,而對於 Kestrel 服務器,端口號為 5000,輔助進程名稱為 WebApplication4 應用程序(它隻不過是您的應用程序名稱)。
到此這篇關於ASP.NET Core托管模型CreateDefaultBuilder()方法的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- ASP.Net Core MVC基礎系列之項目創建
- 在運行時編輯代碼的 .NET 熱重載的操作方法
- ASP.Net Core MVC基礎系列之獲取配置信息
- 使用VS2022在ASP.NET Core中構建輕量級服務
- 修改 asp.net core 5 程序的默認端口號