ASP.NET Core 進程外(out-of-process)托管 在本節中,我們將討論 ASP.NET Core 中的Out Of Process Hosting。 ASP.NET Core 進程內(InProcess)托管 我們先簡單回顧下 ASP.NET Core 中,要配置 InProce ...
ASP.NET Core 進程外(out-of-process)托管
在本節中,我們將討論 ASP.NET Core 中的Out Of Process Hosting
。
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 還可以與反向代理伺服器 (如 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(進程內)托管一起使用
。
所以.net core 有多優秀大家知道了吧。歡迎留言互動~ 代理伺服器: 泛指 IIS,Nginx 或 Apache 等等。
歡迎添加個人微信號:Like若所思。
歡迎關註我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等著你!一起學習共同進步!