首页
学习
活动
专区
工具
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

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

【5min+】后台任务积木。.NetCoreIHostedService

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

1.4K20

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属性返回了这两个对象,之前定义IWebHostBuilderIHostBuilder接口上绝大部分API(并非所有API)借助它们得以复用...; app.Run(); 值得一提是,之前两种承载方式都倾向于将初始化操作定义注册Startup类型,这种编程Minimal API不再被支持,所以如下程序虽然可以成功编译,但是执行时候会抛出异常

93620

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

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

1.2K20

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

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

71120

跨平台开发体验: Windows

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

1.6K30

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

64920

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

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

64610

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 控制台程序,修改项目文件如下: <Project Sdk="Microsoft.NET.Sdk.<em>Web</em>...控制台程序到 <em>Web</em> <em>API</em> <em>的</em>转变 如果我们创建<em>的</em>是一个 <em>Web</em> <em>API</em> 项目,<em>在</em> Program 类中会有一个 CreateHostBuilder <em>的</em>静态方法来返回 <em>IHostBuilder</em> 对象:...(图8) 实现中间件,我们也可以<em>不</em>继承 IMiddleware 接口,按照约束去定义中间件<em>的</em>类一样可以实现功能,<em>在</em> dotNET <em>Core</em> 还有很多<em>的</em>地方使用着固有的约定,比如 Starup 类也没有实现

61140

《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.5K20

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

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

1.4K20

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

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

91120

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

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

1.1K20

.NET Core 3.1和WorkerServices构建Windows服务

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

55900

.NET Core 3.1和WorkerServices构建Windows服务

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

1.1K60

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

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

1K40

.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主机配置默认设置。

72930
领券