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

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

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

然后,Main()方法调用静态类WebHost中的静态方法CreateDefaultBuilder()。
这个CreateDefaultBuilder()方法执行几个任务,如:

  • 将 Kestrel 用作 Web 服务器并启用 IIS 集成。
  • 从种配置源中加载配置。
  • 配置日志记录

在以后的文章中,我们将讨论 asp.net core 中可用的各种配置源,加载主机和应用程序配置信息以及配置日志记录等内容。

在本节中,让我们了解CreateDefaultBuilder()方法用于配置和设置 Web 服务器的功能。 ASP.NET Core 应用程序可以托管在进程内(InProcess)或进程外(OutOfProcess)中。 在本视频中,我们将讨论进程内(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 应用程序。

进程外(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 服务器。.NET Core 支持的所有平台和版本都支持它。它默认包含在 ASP.NET Core 中作为内部服务器。 Kestrel 本身可以用作边缘服务器,即面向互联网的 Web 服务器,它可以直接处理来自客户端的传入 HTTP 请求。

在 Kestrel 中,用于托管应用程序的进程是dotnet.exe。当我们使用.NET Core CLI(命令行界面)运行.NET Core 应用程序时,应用程序使用 Kestrel 作为 Web 服务器。

.NET Core CLI 是一个用于开发.NET 核心应用程序的跨平台工具。使用 CLI 命令我们做:

  • 根据指定的模板创建新项目,配置文件或解决方案
  • 恢复.Net Core 项目所需的所有依赖项和工具包
  • 生成项目及其所有依赖项
  • 运行.net Core 项目等等......

我们可以使用.NET Core CLI 做很多事情。

简单说下 CLI

使用.NET Core CLI 运行我们的 Asp.Net Core 应用程序。

  • 启动 Windows 命令提示符
  • 将目录更改为包含 asp.net Core 项目的文件夹,然后执行dotnet run命令
  • C:\ Projects \Source\repos\ StudentManagement \ StudentManagement > dotnet run

在.NET Core CLI 生成并运行项目之后,它会显示用于访问应用程序的 URL。 在我的例子中,应用程序可以通过访问浏览器地址在 http://localhost:5000 查看内容。

于 Kestrel,用于托管和执行应用程序的进程是dotnet.exe。

因此,当我们导航到http://localhost:5000时,我们将看到显示进程名称dotnet。

欢迎添加个人微信号:Like若所思。

欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

ASP.NET Core 进程内(InProcess)托管的更多相关文章

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

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

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

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

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

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

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

    当一个 ASP.NET Core 应用程序执行的时候,.NET 运行时会去查找 Main()方法,因为它是这个应用程序的起点. 然后,Main()方法调用静态类WebHost中的静态方法CreateD ...

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

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

  6. ASP.Net Core 2.2 InProcess托管的Bug:unable to open database file

    最近把项目更新到了ASP.Net Core 2.2,发布之后发现在IIS下使用SQLite数据库不行了,报异常说不能打开数据库."unable to open database file&q ...

  7. ASP.NET Core MVC内置服务的使用

    ASP.NET Core中的依赖注入可以说是无处不在,其通过创建一个ServiceCollection对象并将服务注册信息以ServiceDescriptor对象的形式添加在其中,其次针对Servic ...

  8. 从零开始学 ASP.NET Core 与 EntityFramework Core 目录

    从零开始学 ASP.NET Core 与 EntityFramework Core 介绍 我是一个目录,它旨在帮助开发者循序渐进的了解 ASP.NET Core 和 Entity Framework ...

  9. ASP.NET Core 2.2 和之前版本区别: 可以在IIS上进行ASP.NET核心进程托管 (翻译)

    原文链接: https://weblog.west-wind.com/posts/2019/Mar/16/ASPNET-Core-Hosting-on-IIS-with-ASPNET-Core-22 ...

随机推荐

  1. 微信jssdk的getLocalImgData拿到的base64不完整

    最近上传图片接口突然出现偶尔报错,错误内容是 图片的base64 在调用 Convert.FromBase64String 报错了. 我从log里面拿到一些 出错的 base64. 发现都有一个特征 ...

  2. GC原理---对象可达判断

    对象可达判断 引用计数算法(Reference Counting) 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1:当引用失效时,计数器减1:任何时刻计数器都为0的对象就是不可能再被 ...

  3. 记录战斗记录你,详解妖尾战斗录像系统[Unity]

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  4. Java连载7-变量&数据类型

    一.变量 1.注意点: 在同一个“作用域”中,变量名不能重名,但是变量可以重新赋值. 2.什么是作用域? 答:描述的是变量的有效范围,在范围之内是可以被访问的,只要出了作用域就无法访问(也就是在大括号 ...

  5. tensor 中mul_,add_解读

    pytorch 中文网文档链接 https://ptorch.com/docs/1/Tensor 每一个张量tensor都有一个相应的torch.Storage保存其数据,张量类提供了一个多维的,横向 ...

  6. 基于opencv 识别、定位二维码 (c++版)

    前言 因工作需要,需要定位图片中的二维码:我遂查阅了相关资料,也学习了opencv开源库.通过一番努力,终于很好的实现了二维码定位.本文将讲解如何使用opencv定位二维码. 定位二维码不仅仅是为了识 ...

  7. 搭建 Frp 来远程内网 Windows 和 Linux 机子

    魏刘宏 2019 年 5 月 19 日 一.使用一键脚本搭建服务端 Frp 这个内网穿透项目的官方地址为 https://github.com/fatedier/frp ,不过我们今天搭建服务端时不直 ...

  8. WInforn中设置ZedGraph的焦点显示坐标格式化以及显示三个坐标数的解决办法

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  9. Java生鲜电商平台-销售管理设计与架构

    Java生鲜电商平台-销售管理设计与架构 说明:在Java开源生鲜电商平台中,销售人员我们称为跟餐饮店老板沟通与下载APP的一类地推人员.(所谓地推指的就是一个一个上门拜访.) 由于销售人员有以下几类 ...

  10. Lucene 写入一个文档到该文档可搜索延迟是多少?

    我看的是最初版的lucene,1.4.3 结论是新写入的文档会先写入内存中,只有当到达一定阈值后才会刷新进磁盘,而搜索可以搜索到的数据由最初定义IndexSearcher时磁盘里的段数据决定,如果想要 ...