首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ASP.NET Core技术研究-探秘Host主机启动过程

当我们将原有ASP.NET 应用程序升级迁移到ASP.NET Core之后,我们发现代码工程中多了两个类Program类和Startup类。 接下来我们详细探秘一下通用主机Host的启动过程。...一、Program类的Main函数入口 Program类最重要的功能就是启动主机,这里有一个主机的概念,是ASP.NET Core全新引入的。 主机负责应用程序启动和生存期管理。...在 web 应用中,其中一个 IHostedService 的实现是启动 HTTP 服务器实现的 web 服务。这里的HTTP服务器默认是Kestrel。...( Windows环境下) 当环境为“开发”时,启用范围验证和依赖关系验证。...加深对ASP.NET Core底层技术原理的理解,只有理解了底层技术实现,我们在应用层才能更好、正确的使用。

1.4K20

IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型

.NET Core 3.0 中的废弃类型(本篇)[1] Part 3 - 避免在 ASP.NET Core 3.0 启动时注入服务 Part 4 - 将终端中间件转换为 ASP.NET Core 3.0...这导致了多种命名空间的冲突与不兼容,所以在 ASP.NET Core 2.x 版本中,我一直尽量不使用通用主机。...在 ASP.NET Core 3.0 中,开发人员作出了巨大的努力,将 Web 主机与通用主机兼容起来。...相似的,IWebHostBuilder也没有继承自IHostBuilder。它们依然是完全独立的接口, 一个只工作在 ASP.NET Core 中,一个只工作在通用主机中。 幸运的是,这也没有关系。...一个在通用IHostBuilder上调用,另一个在ConfigWebHostDefaults()方法中,针对IWebHostBuilder调用 public class Program { public

99120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【5min+】后台任务的积木。.NetCore中的IHostedService

    IWebHostBuilder 更改为了 IHostBuilder。...在AspNet Core中的作用 那么如果是咱们要在AspNet Core中使用它,该如何操作呢?...比如定时发送邮件等,是否直接在 IHostedService 的 StartAsync 中写个死循环呢? 好吧,答案是否定的。 如果这样咱们的Host就启动不起来。...ASP.NET Core Web 应用程序(在 .NET Core 2.0 及更高版本中)或任何进程/主机(从使用 IHost 的 .NET Core 2.1 开始)中启动后台任务提供了一种便捷方式。...其主要优势在于,当主机本身将要关闭时,可以有机会进行正常取消以清理后台任务的代码。 其实关于后台定时任务,您可能会想到一些成熟的框架,比如Hangfire等。

    1.6K20

    ASP.NET Core 6框架揭秘实例演示:ASP.NET Core应用承载方式的变迁

    .Build() .Run(); [S1502]将初始化设置定义在Startup类型中 如果管道涉及过多的 中间件需要注册,我们还可以将“中间件注册”这部分工作实现在一个按照约定定义的Startup类型中...由于ASP.NET Core建立在依赖注入框架之上,所以应用往往需要涉及到很多服务注册,我们一般也会将“服务注册”的工作也放在这个Startup类型中。.../IHost的服务承载系统中之后,也许微软还是意识到Web应用和后台服务的承载方式还是应该加以区分,而且它们采用的SDK都不一样(ASP.NET Core应用采用的SDK为“Microsoft.NET.Sdk.Web...WebApplicationBuilder类型的WebHost和Host属性返回了这两个对象,之前定义在IWebHostBuilder和IHostBuilder接口上的绝大部分API(并非所有API)借助它们得以复用...; app.Run(); 值得一提的是,之前的两种承载方式都倾向于将初始化操作定义在注册的Startup类型中,这种编程在Minimal API中不再被支持,所以如下的程序虽然可以成功编译,但是执行的时候会抛出异常

    1K20

    一题多解,ASP.NET Core应用启动初始化的N种方案

    API完成一些必要的初始化工作。...综上所示,ASP.NET Core应用承载的编程模型主要完成如下几种初始化工作,这些工作都具有N种实现方法。在接下来的内容中,我们将逐个介绍在三种不同的应用承载方式中,这些功能都有哪些实现方式。....NET 6在IHostBuilder/IHost服务承载模型基础上推出了更加简洁的Minimal API,此时又面临相同的“抉择”。...这次它不仅需要兼容IWebHostBuilder,还得兼容IHostBuilder,在加上Minimal API自身提供的API,所以“一题多解”的现象就更多了。...令你们更加感到困惑的时,此时定义在IWebHostBuilder和IHostBuilder的API并非全部可用,本文的下篇将为你一一解惑。

    1.3K20

    ASP.NET Core应用基本编程模式:管道式的请求处理

    ASP.NET Core最初提供了一个以IWebHostBuilder/IWebHost为核心的承载系统,其目的很单纯,就是通过下图所示的形式承载以服务器和中间件管道构建的Web应用。...除了承载Web应用本身,我们还有针对后台服务的承载需求,为此微软推出了以IHostBuilder/IHost为核心的承载系统,我们在《服务承载系统》中已经对该系统做了详细的介绍。...虽然我们不再使用IWebHostBuilder的宿主构建功能,但是定义在IWebHostBuilder上的其他API都是可以使用的。...在基于IHostBuilder/IHost的承载系统中复用IWebHostBuilder的目的是通过如下所示的ConfigureWebHost扩展方法达成的,GenericWebHostService服务也是在这个方法中被注册的...在如下所示的代码片段中,我们定义了一个名为StringContentMiddleware的中间件类型,在执行这个中间件时,它会将预先指定的字符串作为响应内容。

    84220

    跨平台开发体验: Windows

    KestrelServer是一款跨平台的Web服务器,可以在Windows、Mac OS和Linux上使用。...在调用Build方法构建IHost对象之前,我们调用IHostBuilder接口的ConfigureWebHost扩展方法,并利用指定的ActionIWebHostBuilder>委托对象构建出ASP.NET...顾名思义,launchSettings.json是一个在应用启动的时候自动加载的配置文件,该配置文件使我们可以在不同的设置下执行我们的应用程序。...launchSettings.json文件中的所有设置仅仅针对开发环境,产品环境下是不需要这个文件的,应用发布后生成的文件列表中也不包含该文件。...五、显式指定URL 如果既不想使用launchSettings.json文件中定义的URL,也不想使用KestrelServer默认采用的监听地址,我们可以在应用程序中显式指定应用的URL。

    1.7K30

    ASP.NET Core管道详解: ASP.NET Core应用是如何启动的?

    在传统的基于IWebHost/IWebHostBuilder的承载系统中,IWebHost对象表示承载Web应用的宿主,它由对应的IWebHostBuilder对象构建而成,IWebHostBuilder...基于IHost/IHostBuilder的承载系统涉及两种类型的配置:一种是在服务承载过程中供作为宿主的IHost对象使用的配置,另一种是供承载的服务或者应用消费的配置,前者是后者的子集。...,通常将应用启动时需要完成的初始化操作定义在注册的Startup中,按照约定定义的Startup类型旨在完成如下3个任务。...ASP.NET Core应用中。...Hosting Startup与之类似,我们可以将一些初始化操作定义在任意程序集中,在无须修改应用程序任何代码的情况下利用配置的方式实现对它们的注册。

    2.4K31

    从ASP.NET Core2.2到3.0你可能会遇到这些问题

    So,就用vs2019+.NET Core3.0来跟着做一下Contoso University这个WEB应用,但是在基于3.0进行操作的时候遇到了一些问题,所以我就查看了微软的《从 ASP.NET Core...作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10661161.html 我遇到的问题 ASP.NET Core2.0时代,若要为项目添加 EF Core...如果您正在使用aspnet/AspNetCore #3755中列出的包中的API,则可能需要单独添加到。...Json.NET 支持 作为提高 ASP.NET Core 共享的框架工作的一部分, Json.NET已从 ASP.NET Core 共享框架中删除。...若要启用运行时编译,请参阅ASP.NET Core 中的 Razor 文件编译。 总结 感觉微软在努力实现ASP.NET Core的模块化,减小各种依赖,让包变得更小。

    1.4K20

    一题多解,ASP.NET Core应用启动初始化的N种方案

    第二代承载模式需要提供针对IWebHostBuilder接口的兼容,作为第三代承载模式的Minimal API则需要同时提供针对IWebHostBuilder和IHostBuilder接口的兼容,此兼容性是通过这两个接口的实现类型...WebApplicationBuilder类型的WebHost和Host属性返回了这两个对象,之前定义在IWebHostBuilder和IHostBuilder接口上的绝大部分API(并非所有API)借助它们得以复用...、应用配置、承载环境、服务注册和中间件注册这五种初始化操作在Minimal API中的标准编程方式。...(实现了IWebHostBuilder接口)对象来兼容原来定义在IWebHostBuilder接口上的API,有的人可以会觉得我们一定也能够像之前那样利用这个对象来设置承载环境,我们不妨来试试是否可行。...八、Startup类型不再被支持 在Minimal API之前,将服务注册、中间件注册以及针对依赖注入容器的设置放在Startup类型中是一种被推荐的做法,但是这种编程方法在Minimal API中也不再被支持

    71820

    ASP.NET Core应用基本编程模式:基于承载环境的编程

    对于一个Web应用来说,我们需要更多的承载环境信息,额外的信息定义在IWebHostEnvironment接口中。...在默认情况下,针对应用名称的设置体现在如下所示的代码片段中。...当我们编译发布一个ASP.NET Core项目时,项目的源代码文件会被编译成二进制并打包到相应的程序集中,而另外一些文件(如JavaScript、CSS和表示View的.cshtml文件等)会复制到目标目录中...在默认情况下,由ContentRootPath属性表示的内容文件的根目录就是当前应用程序域的基础目录,也就是表示当前应用程序域的AppDomain对象的BaseDirectory属性返回的目录,静态类AppContext...在如下这段实例程序中,我们调用IWebHostBuilder接口的UseSetting方法针对上述4个配置项做了相应的设置。

    74010

    《ASP.NET Core 6框架揭秘》勘误

    P7第2段 原文:由于创建的是 ASP.NET Core 的应用程序,所以最终生成的程序集被保存在“\bin\Debug\net6.0\”目录下。...P619第1段 原文:Minimal API 只是在基于 IHost/IHostBuilder 的服务承载系统上进行了封装,它利用 WebApplication 和 WebApplicationBuilder...改为:Minimal API 只是在基于 IHost/IHostBuilder 的服务承载系统上进行了封装,它利用 WebApplication 和 WebApplicationBuilder 这两个类型提供了更加简洁的...接口和 IWebHostBuilder 接口,其目的是复用 IHostBuilder 接口和 IWebHostBuilder 接口承载的 Minimal API(主要是扩展方法)。...接口和 IWebHostBuilder 接口,其目的是复用 IHostBuilder 接口和 IWebHostBuilder 接口承载的 API(主要是扩展方法)。

    1.6K20

    dotNET Core 3.X 请求处理管道和中间件的理解

    理解 dotNET Core 中的管道模型,对我们学习 dotNET Core 有很大的好处,能让我们知其然,也知其所以然,这样在使用第三方组件或者自己写一些扩展时,可以避免入坑,或者说避免同样的问题多次入坑...w3wp.exe 的进程,我们进行服务器端 Debug 时就需要附加这个进程; 2、在 w3wp.exe 中利用 aspnet_isapi.dll 加载 .NET 运行时; 3、随后运行时 IsapiRuntime...view=aspnetcore-3.1 分析代码理解请求处理 控制台程序 在 Rider 中创建一个 dotNET Core 3.1 的控制台程序,修改项目文件如下: Web...控制台程序到 Web API 的转变 如果我们创建的是一个 Web API 项目,在 Program 类中会有一个 CreateHostBuilder 的静态方法来返回 IHostBuilder 对象:...(图8) 实现中间件,我们也可以不继承 IMiddleware 接口,按照约束去定义中间件的类一样可以实现功能,在 dotNET Core 还有很多的地方使用着固有的约定,比如 Starup 类也没有实现

    72440

    ASP.NET Core 6框架揭秘实例演示:ASP.NET Core 6 Minimal API的模拟实现

    Minimal API仅仅是在基于IHost/IHostBuilder的服务承载系统上作了小小的封装而已,它利用WebApplication和WebApplicationBuilder这两个类型提供了更加简洁的...和IWebHostBuilder接口,其目的是为了复用IHostBuilder和IWebHostBuilder接口承载的API(主要是扩展方法)。...ConfigureHostBuilder ConfigureHostBuilder是在应用了BootstrapHostBuilder收集的初始化设置之后创建的,在创建该对象时提供了HostBuilderContext...Startup类型的编程方式在Minima API中已经不再被支持了,所以WebApplicationBuilder本不该实现ISupportsStartup接口,但是我们希望用户在采用这种编程方式时得到显式的提醒...上面提供的源代码也不是伪代码,如下所示的就是在“模拟的Minimal API”构建的ASP.NET Core应用,它是可以正常运行的。

    1.5K20

    ASP.NET Core应用基本编程模式:配置多种使用形式

    一、初始化配置 当IWebHostBuilder对象被创建的时候,它会将当前的环境变量作为配置源来创建承载最初配置数据的IConfiguration对象,但它只会选择名称以“ASPNETCORE_”为前缀的环境变量...在通过调用IApplicationBuilder的Run方法注册的中间件中,这个JSON字符串直接作为请求的响应内容。...,我们在Main方法中设置了3个对应的环境变量,这些环境变量具有相同的前缀“ASPNETCORE_”。...在ASP.NET Core应用中,我们可以通过调用定义在IWebHostBuilder接口的GetSetting方法和UseSetting方法达到相同的目的。...针对IConfigurationSource的注册可以调用IWebHostBuilder接口的ConfigureAppConfiguration方法来完成,该方法与在IHostBuilder接口上定义的同名方法基本上是等效的

    96220

    ASP.NET Core应用基本编程模式:如何放置你的初始化代码

    一个ASP.NET Core在启动过程中的核心工作就是注册中间件,本节主要介绍应用启动过程中以中间件注册为核心的初始化工作。...目录 一、Startup 二、IHostingStartup 三、IStartupFilter 一、Startup 由于ASP.NET Core应用承载于以IHost/IHostBuilder为核心的承载系统中...,所以在启动过程中需要的所有操作都可以直接调用IHostBuilder接口相应的方法来完成,但是我们倾向于将这些代码单独定义在按照约定定义的Startup类型中。...由于IHostingStartup服务可以通过第三方程序集来提供,如果第三方框架、类库或者工具需要在应用启动时做相应的初始化工作,就可以将这些工作实现在注册的IHostingStart服务中。...当InvokeAsync方法被执行时,中间件在将请求分发给后续中间件之前和之后会分别将一段预先指定的文字写入响应消息的主体内容中,它们代表了中间件针对请求的前置和后置处理。

    1.3K20

    .NET Core 3.1和WorkerServices构建Windows服务

    介绍 ASP.NET Core 3增加了一个非常有意思的功能Worker Service.他是一个ASP.NET Core模板,他允许我们创建托管长期的运行的后台服务,这些服务具体实现IHostedService...接口的后台任务逻辑,他被成为"托管服务".同时他们可以部署到windows中Windows服务,以及Linux守护程序....实现返回一个Task,其表示后台服务整个生存期.在 ExeuteAsync(例如通过调用await)之前,不会启动任何其他服务.避免在ExecuteAsync中执行长时间的阻塞初始化....StopAsync(CancellationToekn) 中的主机块等待完成ExecuteAsync。 调用 IHostedService.StopAsync 时,将触发取消令牌。...当激发取消令牌以便正常关闭服务时,ExecuteAsync 的实现应立即完成。 否则,服务将在关闭超时后不正常关闭。

    61800

    ASP.NET Core应用基本编程模式:依赖注入

    服务注册可以通过调用IHostBuilder接口或者IWebHostBuilder接口相应的方法来完成,前者在《服务承载系统》已经有详细介绍,下面介绍基于IWebHostBuilder接口的服务注册。...当ASP.NET Core框架在创建具体的中间件对象时,会利用依赖注入框架来提供注入的依赖服务。中间件依赖的这些服务自然需要被预先注册,所以中间件和服务注册成为Startup对象的两个核心功能。...如下面的代码片段所示,我们在调用IWebHostBuilder接口的Startup方法时注册了自定义的Startup类型。...由于ASP.NET Core在创建中间件对象并利用它们构建整个请求处理管道时,所有的服务都已经注册完毕,所以注册的任何一个服务都可以注入中间件类型的构造函数中。...具体来说,当IServiceProvider对象因自身的Dispose方法被调用而被回收释放时,它会调用自身维护的所有服务实例的Dispose方法。

    1.1K40

    .NET Core 3.1和WorkerServices构建Windows服务

    介绍 ASP.NET Core 3增加了一个非常有意思的功能Worker Service.他是一个ASP.NET Core模板,他允许我们创建托管长期的运行的后台服务,这些服务具体实现IHostedService...接口的后台任务逻辑,他被成为”托管服务”.同时他们可以部署到windows中Windows服务,以及Linux守护程序....实现返回一个Task,其表示后台服务整个生存期.在 ExeuteAsync(例如通过调用await)之前,不会启动任何其他服务.避免在ExecuteAsync中执行长时间的阻塞初始化....StopAsync(CancellationToekn) 中的主机块等待完成ExecuteAsync。 调用 IHostedService.StopAsync 时,将触发取消令牌。...当激发取消令牌以便正常关闭服务时,ExecuteAsync 的实现应立即完成。 否则,服务将在关闭超时后不正常关闭。

    1.2K60

    .NET Core 3.0 之初识Host源码

    写在前面 ASP .NET Core中的通用主机构建器是在v2.1中引入的,应用在启动时构建主机,主机作为一个对象用于封装应用资源以及应用程序启动和生存期管理。...在.NET Core 3.0中采用了IHostBuilder用于创建Host,同时也不再建议使用Web主机,而建议使用泛型主机,主要原因是原有的通用主机仅适用于非HTTP负载,为了提供更加广泛的主机方案...,需要将HTTP管道与Web主机的接口分离出来。....NET Core 3.0中创建通用主机 以下代码是V3.0中提供的模板代码,可以看到在创建主机的过程中,已经摒弃了WebHostBuilder的创建方式 1: public class Program...另一个区别是关于ConfigureWebHostDefaults()的调用。由于新的主机构建器是通用主机构建器,因此我们必须让它知道我们打算为Web主机配置默认设置。

    81530
    领券