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


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

本文作者:梁桐銘- 微軟最有價值專家(Microsoft MVP) 
文章會隨着版本進行更新,關注我獲取最新版本 
本文出自《從零開始學 ASP.NET Core 與 EntityFramework Core》目錄 
視頻課程效果更佳:跨平台開發實戰掌握 ASP.NET Core 與 EntityFramework Core 

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

在本視頻中,我們將討論 ASP.NET Core 中的Out Of Process Hosting。這是第 6 節的延續。

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

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

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

< AspNetCoreHostingModel > InProcess </ AspNetCoreHostingModel >
XML

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

7 進程內托管圖示

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

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

  • 方法一:將< AspNetCoreHostingModel >元素添加到應用程序的項目文件中,其值為OutOfProcess
< AspNetCoreHostingModel > OutOfProcess </ AspNetCoreHostingModel >
XML
  • 方法二:默認為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; 
C#

當我們使用.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 等等

文章說明

如果您覺得我的文章質量還不錯,歡迎打賞,也可以訂閱我的視頻哦 
未得到授權不得擅自轉載本文內容,52abp.com 保留版權 
感謝您對我的支持


免責聲明!

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



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