ASP.NET Core 進程外(out-of-process)托管


ASP.NET Core 進程外(out-of-process)托管

在本節中,我們將討論 ASP.NET Core 中的Out Of Process Hosting

ASP.NET Core 進程內(InProcess)托管

我們先簡單回顧下 ASP.NET Core 中,要配置 InProcess 的服務器,

需要在項目文件中添加``< AspNetCoreHostingModel >元素,其值為InProcess`

< AspNetCoreHostingModel > InProcess </ AspNetCoreHostingModel >

使用 InProcess 托管,應用程序托管在 IIS 工作進程(w3wp.exe 或 iisexpress.exe)中。 使用 InProcess 托管,只有一個 Web 服務器,它是承載我們的應用程序的 IIS 服務器。

7 進程內托管圖示

ASP.NET Core 進程外(out-of-process)托管

有兩種方法可以配置進程外托管 :

  • 方法一:將< AspNetCoreHostingModel >元素添加到應用程序的項目文件中,其值為OutOfProcess
< AspNetCoreHostingModel > OutOfProcess </ AspNetCoreHostingModel >
  • 方法二:默認為OutOfProcess托管。因此,如果我們 從項目文件中刪除 < AspNetCoreHostingModel >元素,默認情況下 ASP.NET Core 將使用OutOfProcess托管。

進程外(out-of-Process)托管

  • 有 2 個 Web 服務器 ,內部 Web 服務器和外部 Web 服務器。
  • 內部 Web 服務器是 Kestrel, 外部 Web 服務器可以是 IIS,Nginx 或 Apache。在上節課中我們討論了什么是 Kestrel

根據您運行 asp.net Core 應用程序的方式的不同,可能會,也可能不會使用外部 Web 服務器。

 

Kestrel 是嵌入在 asp. net Core 應用程序中的跨平台 web 服務器。使用進程外(out-of-Process)托管, Kestrel 可通過以下兩種方式來進行使用:

Kestrel 可以用作面向互聯網的 web 服務器, 直接處理傳入的 HTTP 請求。 在此模型中, 我們不使用外部 web 服務器。只使用 Kestrel, 它作為服務器可以自主面向互聯網, 直接處理傳入的 HTTP 請求。 當我們使用. net Core CLI 運行 asp. net Core 應用程序時, Kestrel 是唯一用於處理和處理傳入 HTTP 請求的 web 服務器。

kestrel直面互聯網

Kestrel 還可以與反向代理服務器 (如 IIS、Nginx 或 Apache) 結合使用。

配合方向代理

來個討論

如果 Kestrel 可以單獨用作 Web 服務器,為什么我們需要一個反向代理服務器?

因為 Kestrel 使用 "進程外(out-of-process)托管", 結合反向代理服務器是一個不錯的選擇, 因為它提供了額外的配置和安全性層。它可能會更好地與現有基礎設施集成。它還可用於負載平衡。

因此, 在使用反向代理服務器的情況下, 它將接收來自網絡的傳入 HTTP 請求, 並將其轉發到 Kestrel 服務器進行處理。在處理請求時, Kestrel 服務器將響應發送到反向代理服務器, 然后反向代理服務器最終通過網絡將響應發送到請求的客戶端。

在后面的視頻課程中,我們將學習如何將 ASP.NET Core 應用程序部署到 IIS 並使用 IIS 作為反向代理服務器。當我們直接從 Visual Studio 運行 asp.net Core 應用程序時,它默認使用 IIS Express。 由於我們已將應用程序配置為使用進程外托管,所以當前情況下,IIS Express 已經在充當反向代理服務器了。

IIS Express接收傳入的 HTTP 請求並將其轉發給Kestrel進行處理。Kestrel處理請求並將響應發送到IIS Express。IIS Express 反過來將該響應發送到瀏覽器。

使用進程外托管無論您是否使用反向代理服務器,Kestrel 服務器都是作為托管應用程序的服務器同時處理請求的,也就是我們最開始說的自托管。 如果使用反向代理服務器接收傳入的 HTTP 請求並將其轉發到 Kestrel 服務器。同樣,它從 Kestrel 服務器獲取響應並將其發送到客戶端。因此托管應用程序的進程名稱是dotnet.exe

使用以下代碼獲取進程名稱

我們來操作一波,給大家演示看看。記住下面這行代碼,是個知識點

System.Diagnostics.Process.GetCurrentProcess().ProcessName;

當我們使用.NET Core CLI 運行 asp.net Core 項目時,默認情況下它會忽略我們在.csproj 文件中指定的托管設置。因此項目文件中的``AspNetCoreHostingModel`標簽下的值是被忽略了的。 無論您指定的值(InProcess 或 OutOfProcess)如何,它始終都是 OutOfProcess 托管,都是通過 Kestrel 托管應用程序,同時處理 http 請求。

一個常見問題

我們可以在不使用內置的 Kestrel Web 服務器的情況下運行 asp.net Core 應用程序嗎?

答案是肯定可以的,你要相信.NET Core 的開發團隊。如果我們使用 InProcess 托管,則應用程序將托管在 IIS 工作進程(w3wp.exe 或 iisexpress.exe)中。 知識點:Kestrel不與InProcess(進程內)托管一起使用

所以.net core 有多優秀大家知道了吧。歡迎留言互動~ 代理服務器: 泛指 IIS,Nginx 或 Apache 等等。
 

歡迎添加個人微信號:Like若所思。

歡迎關注我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等着你!一起學習共同進步!


 

 


免責聲明!

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



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