[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 web

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

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

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 服務器。mvc

 

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

Kestrel 能夠用做面向互聯網的 web 服務器, 直接處理傳入的 HTTP 請求。 在此模型中, 咱們不使用外部 web 服務器。只使用 Kestrel, 它做爲服務器能夠自主面向互聯網, 直接處理傳入的 HTTP 請求。 當咱們使用. net Core CLI 運行 asp. net Core 應用程序時, Kestrel 是惟一用於處理和處理傳入 HTTP 請求的 web 服務器。學習

kestrel直面互聯網

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

配合方向代理

來個討論

若是 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 保留版權 感謝您對個人支持

相關文章
相關標籤/搜索