700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》

ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》

时间:2022-05-11 20:58:00

相关推荐

ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》

本文出自《从零开始学 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

免费的更新慢,收费的更新快,仅此而已。就这样。

「好看」的人都【在看】↓↓↓

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。