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

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

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

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

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

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

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

< AspNetCoreHostingModel > InProcess </ AspNetCoreHostingModel >
XML

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

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 服务器。

Kestrel 是嵌入在 asp. net Core 应用程序中的跨平台 web 服务器。使用进程外(out-of-Process)托管, Kestrel 可通过以下两种方式来进行使用:

Kestrel 可以用作面向互联网的 web 服务器, 直接处理传入的 HTTP 请求。 在此模型中, 我们不使用外部 web 服务器。只使用 Kestrel, 它作为服务器可以自主面向互联网, 直接处理传入的 HTTP 请求。 当我们使用. net Core CLI 运行 asp. net Core 应用程序时, Kestrel 是唯一用于处理和处理传入 HTTP 请求的 web 服务器。

Kestrel 还可以与反向代理服务器 (如 IIS、Nginx 或 Apache) 结合使用。

来个讨论

如果 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 保留版权 
感谢您对我的支持

[07]ASP.NET Core 进程外(out-of-process)托管的更多相关文章

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

    ASP.NET Core 进程外(out-of-process)托管 在本节中,我们将讨论 ASP.NET Core 中的Out Of Process Hosting. ASP.NET Core 进程 ...

  2. ASP.NET Core 进程内与进程外的性能对比

    ASP.NET Core 进程内与进程外的性能对比 本文内容是<深入去浅出ASP.NET Core>提供的扩展内容,毕竟在书里说进程内外的性能说明对比,对于初学者而言,稍微复杂了点. 我在 ...

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

    ASP.NET Core 进程内(InProcess)托管 在 ASP.NET Core 中的进程内(InProcess)托管模型 什么是 Kestrel 服务器 当一个 ASP.NET Core 应 ...

  4. ASP.NET Core使用Docker进行容器化托管和部署

    一.课程介绍 人生苦短,我用.NET Core!今天给大家分享一下Asp.Net Core以Docker进行容器化部署托管,本课程并不是完完全全的零基础Docker入门教学,课程知识点难免有没覆盖全面 ...

  5. ASP .NET Core HTTP Error 502.5 – Process Failure

    页面返回错误 事件日志显示错误 大家可以先看着个链接 https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetco ...

  6. [06]ASP.NET Core中的进程内(InProcess)托管

    ASP.NET Core 进程内(InProcess)托管 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自<从零开始学 ...

  7. 三行脚本让 asp.net core 附加进程调试不再头痛

    在将项目升级到 asp.net core 2.2 后,很少使用 IIS Express 运行项目了,基本都是控制台运行或者写个脚本批量启动要运行的接口(多个输出项目),一直以为是我机器的 bug 关于 ...

  8. ASP.NET Core教程:使用Supervisor做ASP.NET Core应用程序守护进程

    一.前言 在上一篇文章中,我们讲解了如何在Linux服务器上面部署ASP.NET Core应用程序,并且使用Nginx作为反向代理.我们在Linux服务器上面,是通过ASP.NET Core自宿主的方 ...

  9. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

随机推荐

  1. 字节码联盟成立,WebAssembly 生态将完善网络安全性

    近日 Mozilla.Fastly.Intel 与 Red Hat 宣布成立联合组织 Bytecode Alliance(字节码联盟),该联盟旨在通过协作实施标准和提出新标准,以完善 WebAssem ...

  2. Java之Lambda表达式

    函数式编程思想概述 面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做. 面向对象的思想: 做一件事情,找一个能解决这个事情的对 ...

  3. Bit Manipulation-leetcode

    Bit Manipulation Find the Difference /* * Given two strings s and t which consist of only lowercase  ...

  4. Comet OJ - Contest #10 B题 沉鱼落雁

    ###题目链接### 题目大意:有 n 个正整数,每个正整数代表一个成语,正整数一样则成语相同.同一个正整数最多只会出现 3 次. 求一种排列,使得这个排列中,相同成语的间隔最小值最大,输出这个最小间 ...

  5. (六十一)c#Winform自定义控件-信号灯(工业)-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  6. ASP.NET Core 2.2 WebApi 系列【九】使用SignalR

    1.添加 SignalR 客户端库 右键点击项目->然后选择“添加” >“客户端库” 提供程序选择:unpkg ,库选择:@aspnet/signalr@1.1.4 选择“选择特定文件” ...

  7. Git - Git推送本地分支到远程分支报错(! [rejected] non-fast-forward)的解决办法

    一般都是冲突造成的,解决方案执行如下命令(dev为分支名称): git fetch origin dev  #获取远程 dev 分支的修改 git merge origin dev       #合并 ...

  8. .net core 拦截器的使用

    .net core 拦截器的使用 实例代码:https://gitee.com/D_C_L/InterceptorTest.git 拦截器主要是将程序中的一些可以独立出去的模块进行拦截,比如幕等性,和 ...

  9. java基础(6):方法

    1. 方法 1.1 方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢?可 ...

  10. Linux 资源监控整体分析-TOP

    一.top 第一行,任务队列信息,同 uptime 命令的执行结果 系统时间:15:23:10 运行时间:up 236 day,4min, 当前登录用户:  2个 user 负载均衡(uptime)  ...