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

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)

    分享創造快樂