netcore進程內(InProcess)托管和進程外(out-of-Process)托管


當一個 ASP.NET Core 應用程序執行的時候,.NET 運行時會去查找 Main()方法,因為它是這個應用程序的起點。

然后,Main()方法調用靜態類WebHost中的靜態方法CreateDefaultBuilder()用於配置和設置 Web 服務器。

ASP.NET Core 應用程序可以托管在進程內(InProcess)或進程外(OutOfProcess)中。

進程內(InProcess)托管

若要配置 InProcess 宿主, 請將<AspNetCoreHostingModel>添加到應用的項目文件中, 其中的值為 InProcess

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

當我們選擇使用一個可用的項目模板,創建一個新的 ASP.NET Core 項目時,該項目默認為所有的 IIS 和 IIS Express 的配置都是作為進程內托管(InProcess)。

在 InProcess 托管的情況下,CreateDefaultBuilder()方法調用UseIIS()方法並在 IIS 工作進程**(w3wp.exe 或 iisexpress.exe)***內托管應用程序。

  • 從性能的角度來看,InProcess 托管比 OutOfProcess 托管提供了更高的請求吞吐量。
  • 對於 IIS,執行應用程序的進程名稱是w3wp,對於 IIS Express,它是iisexpress
  • 要獲取執行應用程序的進程名稱,請使用System.Diagnostics.Process.GetCurrentProcess().ProcessName
  • 當我們從 Visual Studio 運行項目時,它默認使用 IISExpress。
  • IIS Express是 IIS 的輕量級自包含版本,針對應用程序開發進行了優化。我們不會將它用於生產。在生產中我們會使用 IIS。

下圖說明了 IIS、ASP.NET Core 模塊和進程內托管的應用之間的關系:

進程內托管方案中的 ASP.NET Core 模塊

 

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

  • 有 2 個 Web 服務器 ,內部 Web 服務器和外部 Web 服務器。
  • 內部 Web 服務器是 Kestrel, 外部 Web 服務器可以是 IIS,Nginx 或 Apache。
  • 使用 InProcess 托管,只有一個 Web 服務器,承載 asp.net Core 應用程序的 IIS。 因此,在內部和外部 Web 服務器之間,他們的代理和請求並沒有性能的損失。

什么是 Kestrel

Kestrel 是 ASP.NET Core 項目模板指定的默認 Web 服務器。

使用 Kestrel:

  • 本身作為邊緣服務器,處理直接來自網絡(包括 Internet)的請求。

 

與反向代理服務器 (如 Internet Information Services (IIS)Nginx 或 Apache)結合使用。 反向代理服務器接收來自 Internet 的 HTTP 請求,並將這些請求轉發到 Kestrel。

Kestrel 通過反向代理服務器(如 IIS、Nginx 或 Apache)間接與 Internet 進行通信

 

 


免責聲明!

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



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