本文出自《从零开始学 CORE MVC》
推荐文章: Core 进程内(InProcess)托管
Core 进程内(InProcess)托管
我们先简单回顾下 Core 中,要配置InProcess的服务器,
需要在项目文件中添加< AspNetCoreHostingModel >
元素,其值为InProcess
< AspNetCoreHostingModel > InProcess </ AspNetCoreHostingModel >
使用InProcess托管,应用程序托管在IIS工作进程(w3wp.exe或iisexpress.exe)中。
使用InProcess托管,只有一个Web服务器,它是承载我们的应用程序的IIS服务器。
进程内托管图示
Core 进程外(out-of-process)托管
有两种方法可以配置进程外托管:
方法一:将< AspNetCoreHostingModel >
元素添加到应用程序的项目文件中,其值为OutOfProcess
< AspNetCoreHostingModel > OutOfProcess </ AspNetCoreHostingModel >
方法二:默认为OutOfProcess
托管。因此,如果我们从项目文件中删除< AspNetCoreHostingModel >
元素,默认情况下 Core 将使用OutOfProcess
托管。
进程外(out-of-Process)托管
有2个Web服务器,内部Web服务器和外部Web服务器。
内部Web服务器是Kestrel,外部Web服务器可以是IIS,Nginx或Apache。在上节课中我们讨论了什么是Kestrel
根据您运行Core应用程序的方式的不同,可能会,也可能不会使用外部Web服务器。
Kestrel是嵌入在Core应用程序中的跨平台web服务器。使用进程外(out-of-Process)托管
,Kestrel可通过以下两种方式来进行使用:
Kestrel可以用作面向互联网的web服务器,直接处理传入的HTTP请求。
在此模型中,我们不使用外部web服务器。只使用Kestrel,它作为服务器可以自主面向互联网,直接处理传入的HTTP请求。
当我们使用.netCoreCLI运行Core应用程序时,Kestrel是唯一用于处理和处理传入HTTP请求的web服务器。
kestrel直面互联网
Kestrel还可以与反向代理服务器(如IIS、Nginx或Apache)结合使用。
配合方向代理
来个讨论
如果Kestrel可以单独用作Web服务器,为什么我们需要一个反向代理服务器?
因为Kestrel使用"进程外(out-of-process)托管",结合反向代理服务器是一个不错的选择,因为它提供了额外的配置和安全性层。它可能会更好地与现有基础设施集成。它还可用于负载平衡。
因此,在使用反向代理服务器的情况下,它将接收来自网络的传入HTTP请求,并将其转发到Kestrel服务器进行处理。在处理请求时,Kestrel服务器将响应发送到反向代理服务器,然后反向代理服务器最终通过网络将响应发送到请求的客户端。
在后面的视频课程中,我们将学习如何将Core应用程序部署到IIS并使用IIS作为反向代理服务器。当我们直接从VisualStudio运行Core应用程序时,它默认使用IISExpress。
由于我们已将应用程序配置为使用进程外托管
,所以当前情况下,IISExpress已经在充当反向代理服务器了。
IIS Express
接收传入的HTTP请求并将其转发给Kestrel
进行处理。Kestrel
处理请求并将响应发送到IIS Express
。IISExpress反过来将该响应发送到浏览器。
使用进程外托管
无论您是否使用反向代理服务器,Kestrel服务器都是作为托管应用程序的服务器同时处理请求的,也就是我们最开始说的自托管。
如果使用反向代理服务器接收传入的HTTP请求并将其转发到Kestrel服务器。同样,它从Kestrel服务器获取响应并将其发送到客户端。因此托管应用程序的进程名称是dotnet.exe
。
使用以下代码获取进程名称
我们来操作一波,给大家演示看看。记住下面这行代码,是个知识点
System.Diagnostics.Process.GetCurrentProcess().ProcessName;
当我们使用.NET Core CLI运行 Core 项目时,默认情况下它会忽略我们在.csproj文件中指定的托管设置
。因此项目文件中的```AspNetCoreHostingModel``标签下的值是被忽略了的。
无论您指定的值(InProcess或OutOfProcess)如何,它始终都是OutOfProcess托管,都是通过Kestrel托管应用程序,同时处理http请求。
一个常见问题
我们可以在不使用内置的KestrelWeb服务器的情况下运行Core应用程序吗?
答案是肯定可以的,你要相信.NETCore的开发团队。如果我们使用InProcess托管,则应用程序将托管在IIS工作进程(w3wp.exe或iisexpress.exe)中。
知识点:Kestrel不与InProcess(进程内)托管一起使用
。
代理服务器:泛指IIS,Nginx或Apache等等
所以.netcore有多优秀大家知道了吧。欢迎留言互动~
硬广专区
如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦
未得到授权不得擅自转载本文内容,保留版权
文字版目录:/Wiki/mvc/latest/1.Intro
代码托管地址:/aiabpedu
知乎专栏:/52abp
交流QQ群:952387474《微软MVP带你学CORE》
【收费】腾讯课堂:/course/392589?tuin=2522cdf3
【免费】youtube视频专区:/Ei0F2EB
【免费】B站:/2954671
免费的更新慢,收费的更新快,仅此而已。就这样。
「好看」的人都【在看】↓↓↓