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 
- 方法二:默認為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。
使用以下代碼獲取進程名稱
我們來操作一波,給大家演示看看。記住下面這行代碼,是個知識點
當我們使用.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?有多優秀大家知道了吧。歡迎留言互動~
硬廣專區
如果您覺得我的文章質量還不錯,歡迎打賞,也可以訂閱我的視頻哦
未得到授權不得擅自轉載本文內容,52abp.com保留版權
文字版目錄:?https://www.52abp.com/Wiki/mvc/latest/1.Intro?
代碼托管地址:https://gitee.com/aiabpedu
知乎專欄:https://zhuanlan.zhihu.com/52abp
交流QQ群:952387474《微軟MVP帶你學ASP.NET?CORE》
【收費】騰訊課堂:?https://ke.qq.com/course/392589?tuin=2522cdf3?
【免費】youtube視頻專區:http://t.cn/Ei0F2EB?
【免費】B站:?https://space.bilibili.com/2954671?
免費的更新慢,收費的更新快,僅此而已。就這樣。?
「好看」的人都【在看】↓↓↓
總結
以上是生活随笔為你收集整理的ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 聊一聊C# 8.0中的await for
- 下一篇: eShopOnContainers 知多
