歡迎光臨
每天分享高質量文章

ASP.NET Core 行程外(out-of-process)託管(7)《從零開始學ASP.NET CORE MVC》

 

本文出自《從零開始學ASP.NET CORE MVC》
推薦文章:ASP.NET Core 行程內(InProcess)託管

ASP.NET Core 行程內(InProcess)託管

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

需要在專案檔案中新增< AspNetCoreHostingModel >元素,其值為InProcess

< AspNetCoreHostingModel > InProcess AspNetCoreHostingModel >

 

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

 

行程內託管圖示

 

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(行程內)託管一起使用

代理伺服器: 泛指IIS,Nginx或Apache等等

所以.net core 有多優秀大家知道了吧。歡迎留言互動~

    已同步到看一看
    贊(0)

    分享創造快樂