[07]ASP.NET Core 进程外(out-of-process)托管

ASP.NET Core 进程外(out-of-process)托管

本文做者:梁桐铭- 微软最有价值专家(Microsoft MVP) 
文章会随着版本进行更新,关注我获取最新版本 
本文出自《从零开始学 ASP.NET Core 与 EntityFramework Core》目录 
视频课程效果更佳:跨平台开发实战掌握 ASP.NET Core 与 EntityFramework Core web

ASP.NET Core 进程外(out-of-process)托管

在本视频中,咱们将讨论 ASP.NET Core 中的Out Of Process Hosting。这是第 6 节的延续。express

ASP.NET Core 进程内(InProcess)托管

咱们先简单回顾下 ASP.NET Core 中,要配置 InProcess 的服务器,浏览器

须要在项目文件中添加``< AspNetCoreHostingModel >元素,其值为InProcess`安全

< AspNetCoreHostingModel > InProcess </ AspNetCoreHostingModel >
XML

使用 InProcess 托管,应用程序托管在 IIS 工做进程(w3wp.exe 或 iisexpress.exe)中。 使用 InProcess 托管,只有一个 Web 服务器,它是承载咱们的应用程序的 IIS 服务器。服务器

7 进程内托管图示

ASP.NET Core 进程外(out-of-process)托管

有两种方法能够配置进程外托管 :网络

  • 方法一:将< AspNetCoreHostingModel >元素添加到应用程序的项目文件中,其值为OutOfProcess
< AspNetCoreHostingModel > OutOfProcess </ AspNetCoreHostingModel >
XML
  • 方法二:默认为OutOfProcess托管。所以,若是咱们 从项目文件中删除 < AspNetCoreHostingModel >元素,默认状况下 ASP.NET Core 将使用OutOfProcess托管。

进程外(out-of-Process)托管

  • 有 2 个 Web 服务器 ,内部 Web 服务器和外部 Web 服务器。
  • 内部 Web 服务器是 Kestrel, 外部 Web 服务器能够是 IIS,Nginx 或 Apache。在上节课中咱们讨论了什么是 Kestrel

根据您运行 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直面互联网

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

使用如下代码获取进程名称

咱们来操做一波,给你们演示看看。记住下面这行代码,是个知识点

System.Diagnostics.Process.GetCurrentProcess().ProcessName; 
C#

当咱们使用.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 保留版权 感谢您对个人支持

相关文章
相关标签/搜索