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

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

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>
XML

当我们选择使用一个可用的项目模板,创建一个新的 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

下一个视频: ASP.NET Core 中的进程外托管模型

文章说明

如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦 
未得到授权不得擅自转载本文内容,52abp.com 保留版权 
感谢您对我的支持

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

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

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

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

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

  3. Asp.net core使用MediatR进程内发布/订阅

    1.背景 最近,一个工作了一个月的同事离职了,所做的东西怼了过来.一看代码,惨不忍睹,一个方法六七百行,啥也不说了吧,实在没法儿说.介绍下业务场景吧,一个公共操作A,业务中各个地方都会做A操作,正常人 ...

  4. ASP.NET CORE中控制器内return HTML 内容自动编码问题

    以前ASP.NET MVC中在控制器中直接 return Content( "<h1>测试测试</h1>"); 在前台VIEW上就显示加粗的文字了,但是在A ...

  5. ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化

    原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...

  6. ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

    前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...

  7. [08]ASP.NET Core 中 launchsettings.json 启动配置文件

    ASP.NET Core launchsettings.json 启动配置文件 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自 ...

  8. 在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

    在这篇文章中,我将介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业.这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态.接下来我将演示如何创建一个简 ...

  9. ASP.NET Core中使用固定窗口限流

    算法原理 固定窗口算法又称计数器算法,是一种简单的限流算法.在单位时间内设定一个阈值和一个计数值,每收到一个请求则计数值加一,如果计数值超过阈值则触发限流,如果达不到则请求正常处理,进入下一个单位时间 ...

随机推荐

  1. 数组类的创建——StaticArray.h

    创建好的基于顺序存储结构的线性表存在两个方面的问题:1)功能上的问题:数组操作符的重载带来的问题,有可能线性表被无用为数组了,线性表被当做数组来使用了.2)效率方面的问题 本篇博客就要解决功能上的问题 ...

  2. 54. Spiral Matrix && 59. Spiral Matrix II

    Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral ord ...

  3. Pipe——高性能IO(二)

    Pipelines - .NET中的新IO API指引(一) Pipelines - .NET中的新IO API指引(二) 关于System.IO.Pipelines的一篇说明 System.IO.P ...

  4. [译]Vulkan教程(11)Image Views

    Image views To use any VkImage, including those in the swap chain, in the render pipeline we have to ...

  5. JavaScript Array filter() 方法

    JavaScript Array filter() 方法 var ages = [32, 33, 16, 40]; function checkAdult(age) { return age > ...

  6. pyhon代码设计格式指南

    一 缘由: 经常看到周围人写的代码,在大公司有规范,很多人不乱写代码,但是在很多小公司,很多程序员都是半路出家,也不喜欢读书学习,导致写出来的代码乱七八糟.今天拜读了python编程这本书,作者把py ...

  7. 21-django-pure-pagination分页

    一.django-pure-pagination分页 github上的描述(django-pure-pagination provides advanced pagination features a ...

  8. Git终端命令行的常用操作

    一.git源代码管理的优点 方便多人协同开发.工作 降低代码的管理成本 良好的分支管理机制 二.结构分析 服务端和客户端都有版本控制能力,都能进行代码的提交.合并 结构一: 结构二: 三.工作区的创建 ...

  9. Kubernetes的ConfigMap对象使用

    ConfigMap和Secret几乎一样,只是Secret会用base64加密,创建方式也可以彩yaml或者文件方式 下面演示一下通过文件创建configmap 创建配置文件my.yaml name: ...

  10. 阿里面试实战题2----ReentrantLock里面lock和tryLock的区别

    ReentrantLock ReentrantLock(轻量级锁)也可以叫对象锁,可重入锁,互斥锁.synchronized重量级锁,JDK前期的版本lock比synchronized更快,在JDK1 ...