本文做者:梁桐銘- 微軟最有價值專家(Microsoft MVP)
文章會隨着版本進行更新,關注我獲取最新版本
本文出自《從零開始學 ASP.NET Core 與 EntityFramework Core》目錄
視頻課程效果更佳:跨平臺開發實戰掌握 ASP.NET Core 與 EntityFramework Core web
在本視頻中,咱們將討論 ASP.NET Core 中的Out Of Process Hosting
。這是第 6 節的延續。express
咱們先簡單回顧下 ASP.NET Core 中,要配置 InProcess 的服務器,瀏覽器
須要在項目文件中添加``< AspNetCoreHostingModel >元素,其值爲
InProcess`安全
使用 InProcess 託管,應用程序託管在 IIS 工做進程(w3wp.exe 或 iisexpress.exe)中。 使用 InProcess 託管,只有一個 Web 服務器,它是承載咱們的應用程序的 IIS 服務器。服務器
有兩種方法能夠配置進程外託管 :網絡
< AspNetCoreHostingModel >
元素添加到應用程序的項目文件中,其值爲OutOfProcess
OutOfProcess
託管。所以,若是咱們 從項目文件中刪除 < AspNetCoreHostingModel >
元素,默認狀況下 ASP.NET Core 將使用OutOfProcess
託管。根據您運行 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 還能夠與反向代理服務器 (如 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
。
咱們來操做一波,給你們演示看看。記住下面這行代碼,是個知識點
當咱們使用.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 保留版權 感謝您對個人支持