.NET CORE应用程序启动

ASP.NET Core 应用是在其 Main 方法中创建 Web 服务器的控制台应用:

Main 方法调用 WebHost.CreateDefaultBuilder,通过生成器模式来创建web主机.生成器提供定义 Web 服务器(例如,UseKestrel)和启动类 (UseStartup) 的方法。 在前面的例子中,自动分配了 Kestrel Web 服务器。ASP.NET Core 的 Web 主机尝试在 IIS 上运行(如果可用)。 对于其他 Web 服务器(如 HTTP.sys),可通过调用相应的扩展方法来使用。 在下一节对 UseStartup 进行了更深入的介绍。

IWebHostBuilder 是 WebHost.CreateDefaultBuilder 调用的返回类型,它提供了许多可选方法。 其中的一些方法包括用于在 HTTP.sys 中托管应用的 UseHttpSys ,以及用于指定根内容目录的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 对象,该对象托管应用并开始侦听 HTTP 请求。

WebHostBuilder 提供了许多可选方法,其中包括用于在 IIS 和 IIS Express 中进行托管的 UseIISIntegration,以及用于指定根内容目录的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 对象,该对象托管应用并开始侦听HTTP 请求。

Startup 类用于定义请求处理管道和配置应用所需的任何服务

ConfigureServices 定义应用所使用的服务(如 ASP.NET Core MVC、Entity Framework Core 和标识)。 Configure定义在请求管道中调用的中间件。

public class Startup
{
// This method gets called by the runtime. Use this method
// to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method
// to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app)
{
}
}
  • 内容:如 Razor Pages、MVC 视图和静态资源
  • Web根:包含公共资源、CSS 等静态资源、JavaScript 和图形文件。
  • 依赖关系注入服务:服务是应用中常用的组件。 可以通过依存关系注入 (DI) 来获取服务。 ASP.NET Core 包括默认支持构造函数注入的本机控制反转 (IoC) 容器。 可根据需要替换默认容器。 DI 除了具备松散耦合优势以外,还可以使服务(例如日志记录)在整个应用中可用。
  • 中间件:在 ASP.NET Core 中,使用中间件来撰写请求管道。 ASP.NET Core 中间件在 HttpContext 上执行异步操作,然后调用管道中的下一个中间件或终止请求。按照惯例,通过在 Configure 方法中调用 UseXYZ 扩展方法,向管道添加名为“XYZ”的中间件组件。ASP.NET Core 包含一组丰富的内置中间件,你也可以编写自己的自定义中间件。 ASP.NET Core 应用中支持 .NET的开放 Web 接口 (OWIN),它将 Web 应用与 Web 服务器分离。
  • HTTP启动请求:IHttpClientFactory 可访问 HttpClient 实例以发出 HTTP 请求。
  • 环境:环境(如“开发”环境和“生产”环境)是 ASP.NET Core 的高级概念,可使用环境变量、设置文件和命令行参数进行设置。
  • ASP.NET Core 应用可配置和启动一个主机,负责应用启动和生存期管理。
  • 服务器:ASP.NET Core 托管模型不直接侦听请求。 托管模型依赖 HTTP 服务器实现将请求转发到应用。 转发的请求被打包为一组可通过接口进行访问的功能对象。 ASP.NET Core 包含托管的跨平台 Web 服务器,名为 Kestrel。 Kestrel通常在生产 Web 服务器(如反向代理配置中的 IIS 或 Nginx)后台运行。
  • 配置:基于名称/值对使用配置模型,不再是system.Configuration和web.config。配置从一组有序的配置提供程序获取设置。 内置配置提供程序支持各种文件格式(XML、 JSON、INI)、环境变量和命令行参数。 也可以编写你自己的自定义配置提供程序。
  • 日志记录:ASP.NET Core 支持适用于各种日志记录提供程序的日志记录 API。 内置提供程序支持向一个或多个目标发送日志。 可使用第三方记录框架。
  • 错误处理:ASP.NET Core 的内置方案可处理应用中的错误,包括开发人员异常页、自定义错误页、静态状态代码页和启动异常处理。
  • 路由
  • 文件处理
  • 静态文件
  • 会话和应用状态:ASP.NET Core 提供几种可在用户浏览 web 应用时保留会话和应用状态的方法。
  • 请求功能:与HTTP请求和响应相关的Web服务器实现详细信息在接口中定义,服务器实现和中间件使用这些接口来创建和修改应用的托管管道。
  • 后台任务:后台任务作为托管服务实现。 托管服务是一个类,具有实现 IHostedService 接口的后台任务逻辑。
  • WebSockets:WebSocket 是一个协议,支持通过 TCP 连接建立持久的双向信道。 它可用于聊天、股票报价和游戏等应用,以及Web 应用中需要实时功能的任何位置。 ASP.NET Core 支持 Web 套接字方案。

 Statusup类配置服务和请求管道

Statusup类包括ConfigureServices方法以配置应用的服务.Configure方法以创建应用的请求处理管道

在 Startup 类中注入依赖关系的常见用途为注入:

  • IHostingEnvironment 以按环境配置服务。
  • IConfiguration 以读取配置。
  • ILoggerFactory 以在 Startup.ConfigureServices 中创建记录器。
 private readonly IHostingEnvironment _env;
        private readonly IConfiguration _config;
        private readonly ILoggerFactory _loggerFactory;
        public Startup(IHostingEnvironment env, IConfiguration config,
        ILoggerFactory loggerFactory)
        {
            _env = env;
            _config = config;
            _loggerFactory = loggerFactory;
        }

ConfigureServices方法

  • Optional
  • 在 Configure 方法配置应用服务之前,由 Web 主机调用。
  • 其中按常规设置配置选项。


调用所有Add{Service}方法,然后调用所有services.Configure{Service}方法。

将服务添加到服务容器,使其应用和Config方法中可用,这些服务是通过依赖关系注入或IApplicationBuilder.ApplicationServices 解析。

Configure方法


configure方法用于指定应用响应HTTP请求的方式。可通过将中间件组件添加到IApplicationBuilder实例来配置请求管道。Configure 方法可使用 IApplicationBuilder ,但未在服务容器中注册。 托管创建IApplicationBuilder 并将其直接传递到 管道 。Configure 方法可使用 IApplicationBuilder ,但未在服务容器中注册。 托管创建IApplicationBuilder 并将其直接传递到 Configure 。

使用Use扩展方法将中间件组件添加到请求管道,

使用Startup筛选器扩展Startup

在应用的 Configure 中间件管道的开头或末尾使用 IStartupFilter 来配置中间件。 IStartupFilter 有助于确保
中间件在应用请求处理管道的开始或结束时由库添加的中间件之前或之后运行

IStartupFilter 实现单个方法(即 Configure),该方法接收并返回 Action<IApplicationBuilder> 。
IApplicationBuilder 定义用于配置应用请求管道的类。 有关详细信息,请参阅使用 IApplicationBuilder 创建中
间件管道。
在请求管道中,每个 IStartupFilter 实现一个或多个中间件。 筛选器按照添加到服务容器的顺序调用。 筛选
器可在将控件传递给下一个筛选器之前或之后添加中间件,从而附加到应用管道的开头或末尾。

IStartupFilter 实现单个方法(即 Configure),该方法接收并返回 Action<IApplicationBuilder> 。
IApplicationBuilder 定义用于配置应用请求管道的类。

IStartupFilter 在 IWebHostBuilder.ConfigureServices 中的服务容器中注册

中间件执行顺序由 IStartupFilter 注册顺序设置:
多个 IStartupFilter 实现可能与相同的对象进行交互。 如果顺序很重要,请将它们的 IStartupFilter 服
务注册进行排序,以匹配其中间件应有的运行顺序。
库可能添加包含一个或多个 IStartupFilter 实现的中间件,这些实现在向 IStartupFilter 注册的其他应
用中间件之前或之后运行。 若要在库的 IStartupFilter 添加中间件之前调用 IStartupFilter 中间件,请
在将库添加到服务容器之前定位服务注册。 若要在此后调用,请在添加库之后定位服务注册。

原文地址:https://www.cnblogs.com/ccaa/p/12274587.html

时间: 2024-11-12 03:16:15

.NET CORE应用程序启动的相关文章

Asp.Net Core 应用程序启动(翻译)

Startup 用于配置服务和应用的请求管道. The Startup class Asp.Net Core 应用使用StartUp类.StartUp类: 1.可选地包含ConfigureServices 方法,配置应用的服务. 2.必须包含一个Configure 方法,创建应用的请求处理管道. ConfigureServices 和 Configure 方法在应用启动时由运行时调用. 1 public class Startup 2 { 3 // Use this method to add

如何在ASP.NET Core程序启动时运行异步任务(2)

原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中,我介绍了如何在ASP.NET Core应用程序启动时运行一些一次性异步任务.本篇博客将继续讨论上一篇的内容,如果你还没有读过,我建议你先读一下前一篇. 在本篇博客中,我将展示上一篇博文中提出的"在Program.cs中手动运行异步任务"的实现方法.该实现会使用一些简单的接口和类来封装应用

ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程序提供了处理每个请求的完整控制.Startup 类是应用程序的入口(entry point),这个类可以设置配置(configuration)并且将应用程序将要使用的服务连接起来.开发人员可以在 Startup 类中配置请求管道,该管道将用于处理应用程序的所有请求. 章节: Startup 类 Co

在 ASP.NET Core 程序启动前运行你的代码

原文:在 ASP.NET Core 程序启动前运行你的代码 一.前言# 在进行 Web 项目开发的过程中,可能会存在一些需要经常访问的静态数据,针对这种在程序运行过程中可能几乎不会发生变化的数据,我们可以尝试在程序运行前写入到缓存中,这样在系统后续使用时就可以直接从缓存中进行获取,从而减缓因为频繁读取这些静态数据造成的应用数据库服务器的巨大承载压力. 既然需要在程序运行前将静态数据写入到缓存中,毫无疑问我们需要在程序运行前执行一些自定义功能的代码,那么在本章中,我将会介绍如何在 ASP.NET

【Android】应用程序启动过程源码分析

在Android系统中,应用程序是由Activity组成的,因此,应用程序的启动过程实际上就是应用程序中的默认Activity的启动过程,本文将详细分析应用程序框架层的源代码,了解Android应用程序的启动过程. 启动Android应用程序中的Activity的两种情景:其中,在手机屏幕中点击应用程序图标的情景就会引发Android应用程序中的默认Activity的启动,从而把应用程序启动起来.这种启动方式的特点是会启动一个新的进程来加载相应的Activity. 这里,我们以这个例子为例来说明

生产环境中CentOS7部署NET Core应用程序

NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方案,今天

使用Visual Studio Code创建第一个ASP.NET Core应用程序

全文翻译自:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 这篇文章将向你展示如何在Mac上写出你的第一个ASP.NET Core应用程序. 本文内容: 搭建开发环境 使用Yeoman搭建应用程序 使用Visual Studio Core开发ASP.NET应用程序 使用Kestrel在本地运行这个应用程序 将这个应用程序发布至Azure 学习资源 搭建开发环境 在你的开发机上下载并安装.Net Core和

【转载】Net Core MVC6 RC2 启动过程分析

入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢?.NET Web Development and Tools Blog ASP.NET Core is a console app In RC1 an ASP.NET application was a class library that contained a Startup.cs class. When the DNX toolchain run your applicatio

将ASP.NET Core应用程序部署至生产环境中(CentOS7)

阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方案,今天就跟大家分享一下如何将ASP.NET Core应用程序以生产