netcore进程内(InProcess)托管和进程外(out-of-Process)托管

当一个 ASP.NET Core 应用程序执行的时候,.NET 运行时会去查找 Main()方法,因为它是这个应用程序的起点。

然后,Main()方法调用静态类WebHost中的静态方法CreateDefaultBuilder()用于配置和设置 Web 服务器。

 

ASP.NET Core新增两种Web服务器

1)、HTTP.sys 是仅在 Windows 上运行的适用于 ASP.NET Core 的 Web 服务器。 HTTP.sys 是 Kestrel 服务器的替代选择,提供了一些 Kestrel 不提供的功能。

 重要

HTTP.sys 与 ASP.NET Core 模块不兼容,无法与 IIS 或 IIS Express 结合使用。


2)、Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器。 Kestrel 是 Web 服务器,默认包括在 ASP.NET Core 项目模板中。

总结: HTTP.sys虽然可以替代IIS,它只能在windows上平台进行允许,但是实际中在windows平台上我们还是用IIS进行托管。

 

ASP.NET Core 应用程序可以托管在进程内(InProcess)或进程外(OutOfProcess)中。

进程内(InProcess)托管

若要配置 InProcess 宿主, 请将<AspNetCoreHostingModel>添加到应用的项目文件中, 其中的值为 InProcess

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

当我们选择使用一个可用的项目模板,创建一个新的 ASP.NET Core 项目时,该项目默认为所有的 IIS 和 IIS Express 的配置都是作为进程内托管(InProcess)。

在 InProcess 托管的情况下,CreateDefaultBuilder()方法调用UseIIS()方法并在 IIS 工作进程**(w3wp.exe 或 iisexpress.exe)***内托管应用程序。

  • 从性能的角度来看,InProcess 托管比 OutOfProcess 托管提供了更高的请求吞吐量。
  • 对于 IIS,执行应用程序的进程名称是w3wp,对于 IIS Express,它是iisexpress
  • 要获取执行应用程序的进程名称,请使用System.Diagnostics.Process.GetCurrentProcess().ProcessName
  • 当我们从 Visual Studio 运行项目时,它默认使用 IISExpress。
  • IIS Express是 IIS 的轻量级自包含版本,针对应用程序开发进行了优化。我们不会将它用于生产。在生产中我们会使用 IIS。

下图说明了 IIS、ASP.NET Core 模块和进程内托管的应用之间的关系:

进程内托管方案中的 ASP.NET Core 模块

 

使用 IIS 在 Windows 上托管 ASP.NET Core即可以是"进程内"也可以是"进程外"

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-3.1

 

ASP.NET Core 模块是插入 IIS 管道的本机 IIS 模块,用于:

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2

受支持的 Windows 版本:

  • Windows 7 或更高版本
  • Windows Server 2008 R2 或更高版本

在进程内托管时,该模块会使用 IIS 进程内服务器实现,即 IIS HTTP 服务器 (IISHttpServer)。‘

   在进程内,CreateDefaultBuilder 调用 UseIIS 

在进程外托管时,该模块仅适用于 Kestrel。 该模块无法与 HTTP.sys 一起工作。

  在进程外,CreateDefaultBuilder 调用 UseIISIntegration

 

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

  • 有 2 个 Web 服务器 ,内部 Web 服务器和外部 Web 服务器。
  • 内部 Web 服务器是 Kestrel, 外部 Web 服务器可以是 IIS,Nginx 或 Apache。
  • 使用 InProcess 托管,只有一个 Web 服务器,承载 asp.net Core 应用程序的 IIS。 因此,在内部和外部 Web 服务器之间,他们的代理和请求并没有性能的损失。

什么是 Kestrel

Kestrel 是 ASP.NET Core 项目模板指定的默认 Web 服务器。

使用 Kestrel:

  • 本身作为边缘服务器,处理直接来自网络(包括 Internet)的请求。

 

与反向代理服务器 (如 Internet Information Services (IIS)Nginx 或 Apache)结合使用。 反向代理服务器接收来自 Internet 的 HTTP 请求,并将这些请求转发到 Kestrel。

Kestrel 通过反向代理服务器(如 IIS、Nginx 或 Apache)间接与 Internet 进行通信

 

 

 

posted @   跟着阿笨一起玩.NET  阅读(2136)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2015-04-24 用SoapUI进行Webservice的性能压力测试
2012-04-24 关于MDI窗体的那些问题
点击右上角即可分享
微信分享提示