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


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

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

    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 模块

    进程外(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 进行通信

  • 相关阅读:
    async源码学习
    js 数组去重
    node通过http.request向其他服务器上传文件
    学习CSS布局
    学习CSS布局
    学习CSS布局
    学习CSS布局
    学习CSS布局
    学习CSS布局
    学习CSS布局
  • 原文地址:https://www.cnblogs.com/marshhu/p/11963472.html
Copyright © 2020-2023  润新知