首页
学习
活动
专区
圈层
工具
发布

利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务「建议收藏」

此文源于前公司在迁移项目到.NET Core的过程中,希望使用Generic Host来管理定时任务程序时,没法部署到Windows服务的问题,而且官方也没给出解决方案,只能关注一下官方issue #809...官方文档只提供了一个《在 Windows 服务中托管 ASP.NET Core》的方案,可以使用Microsoft.AspNetCore.Hosting.WindowsServices类库来把Web应用部署为...但是ASP.NET Core虽然是控制台程序,但是它本身是使用了含有HTTP管道的Web Host来负责应用程序的生命周期管理,用它来作为定时任务的话,会有很多不必要的工作负载,例如占用端口、增加了很多依赖等等...官方意识到这个问题之后,在.NET Core 2.1版本新增了Generic Host通用主机,剥离了原来WebHost的Http管道相关的API,源码中可以发现Web Host已经基于Generic...它才是作为纯粹定时任务程序的最佳拍档。 但是由于Generic Host本身非常简单,用它运行的程序设置在注册为Windows服务启动之后会自动停止。

91120

ASP.NET Core 依赖注入(DI)简介

ASP.NET Core应用程序可以通过将其注入到Startup类中的方法中来利用内置的框架服务,并且应用程序服务也可以配置为注入。...容器本质上是一个工厂,负责提供从它请求的类型的实例。 如果给定类型已声明它具有依赖关系,并且容器已配置为提供依赖关系类型,那么它将创建依赖关系作为创建请求的实例的一部分。...以这种方式,可以将复杂的依赖关系图提供给类,而不需要任何硬编码的对象构造。 除了创建具有依赖关系的对象之外,容器通常会在应用程序中管理对象生命周期。...ASP.NET的容器是指它作为服务管理的类型。 在本文的其余部分中,服务将引用由ASP.NET Core的IoC容器管理的类型。...如果将其与静态对象访问混合,您将无法实现DI的优点。

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

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

    由于ASP.NET Core应用针对请求的处理能力与方式完全取决于注册的中间件,所以这里所谓的针对应用程序的初始化主要体现在针对中间件的注册上。...当ASP.NET Core框架在创建具体的中间件对象时,会利用依赖注入框架来提供注入的依赖服务。中间件依赖的这些服务自然需要被预先注册,所以中间件和服务注册成为Startup对象的两个核心功能。...由于ASP.NET Core在创建中间件对象并利用它们构建整个请求处理管道时,所有的服务都已经注册完毕,所以注册的任何一个服务都可以注入中间件类型的构造函数中。...两个IServiceProvider对象 如果在一个具体的ASP.NET Core应用中讨论服务生命周期会更加易于理解:Singleton是针对应用程序的生命周期,而Scoped是针对请求的生命周期。...在一个ASP.NET Core应用中,如果将服务的生命周期注册为Scoped模式,那么我们希望服务实例真正采用基于请求的生命周期模式。

    1.4K40

    面向初学者的 Entity Framework Core

    实体框架核心(Entity Framework Core,简称EF Core)是一款适用于.NET应用程序的开源、轻量级且跨平台的对象关系映射器(Object-Relational Mapper,简称ORM...它允许开发人员使用.NET对象来操作数据库,从而无需编写大多数SQL查询语句。EF Core通过对数据库交互的复杂性进行抽象,使得数据访问代码更易于维护、扩展和测试。...EF Core会在幕后生成相应的SQL语句。 跨平台:EF Core支持Windows、Linux和macOS系统,这使其适用于现代.NET应用程序。...代码先行(Code-first)方法:借助EF Core,你可以使用代码先行的方法直接依据.NET类来创建数据库结构。...EF Core中的关键概念 DbContext: DbContext是EF Core中的核心类,用于管理数据库交互操作。它充当了.NET应用程序与数据库之间的桥梁。

    1.5K10

    为什么你需要将代码迁移到ASP.NET Core 2.0?

    /webdev/2017/08/14/announcing-asp-net-core-2-0/ 转载请注明出自:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。...模板增强 ASP.NET Core 附带的模板已被增强,不仅包括使用 MVC 模式构建的 Web 应用程序,还包括 Razor Pages Web 应用程序模板,以及一系列能够为浏览器构建单页应用程序...这些 SPA 模板使用 JavaScript 服务功能在服务器上将 NodeJS 嵌入到 ASP.NET Core 中,并将 JavaScript 服务器端的应用程序作为.NET构建过程的一部分进行编译...DbContext Pooling 许多 ASP.NET Core 应用程序现在可以通过将其 DbContext 类型的服务注册,配置为使用预先创建的实例池来获得性能提升,从而能够避免为每个请求创建新的实例...Core 2.0 不但带来了巨大的性能提升,而且该版本的更新还提供了编写应用程序的新方法,同时简化了管理应用程序的操作过程。

    1.3K10

    迁移 appseting.json 创建自定义配置中心

    自使用.NET Core框架以来,配置大多存在json文件中: 【框架默认加载配置】文件为appseting.json 以及ppsettings.Environment.json, 【环境变量】存在...CreateHostBuilder()方法中去加入的,所以他无法二次构建,除非web重启,所以在修改了数据库内的配置无法实现热重载, 此处使用的是SqLite去实现的,假设现在框架内换了数据库去实现,去修改...从代码层面来讲,我们的配置信息都会转换成一个IConfiguration对象供应用程序使用,IConfigurationBuilder是IConfiguration对象的构建者,IConfigurationSource...UML图,该图源自【ASP.NET Core3框架揭秘(上册)】。...接着创建一个新的配置Key为diy,Value为testDiy的配置,短暂等待构造方法刷新IConfiguration之后,通过GetSection("diy")成功拿到了新的值,故热重载也成功实现!

    1.4K40

    【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问

    减少了编写和维护 SQL 语句的工作量。 提高了代码的可读性和可维护性。 通过 ORM 的查询构建器,可以编写类型安全且易于理解的查询。 提供了对象之间的关系管理,如自动维护关联对象的状态。...在 Entity Framework Core(EF Core)中,ORM 的概念依然适用,EF Core 提供了 ORM 功能,允许开发者使用 .NET 类型(如类和对象)来表示数据库中的表格和数据,...如果你需要在应用程序中使用多个数据库,你可以创建多个 DbContext 实例,每个实例对应一个数据库。每个 DbContext 都会维护它自己的会话、缓存和工作线程。...确保在使用不同数据库的情况下,为每个 DbContext 配置正确的连接字符串。此外,不同的数据库可能需要不同的迁移和配置设置。在执行迁移时,你需要针对每个数据库单独运行迁移命令。...如果可能的话,尽量将应用程序设计为单一数据库方案,这样可以获得更好的性能和更简单的维护。

    2.9K00

    ASP.Net Core 开发笔记

    尝试使用 ASP.Net Core 开发web应用程序一段时间了,感觉 ASP.Net core 不论是开发体验还是各方面都很优秀,整理笔记,便于后面使用时翻看。...Core 项目 项目结构 此处以一个Web API 项目为例, 针对不太大的项目,采用了一个划分为三层的结构。...定义项目的类型:Web,Console,Library 定义项目的目标平台:.NET Core, .NET Framework, Mono 列举项目依赖(Nuget,其他类库等) Program.cs...ASP.NET Core 服务注册生命周期 Transient: 每次其它的类请求(不是指HTTP Request)都会创建一个新的实例,它比较适合轻量级的无状态的(Stateless)的service...Uow 和 Repository模式 的关系即: 工作单元服务于仓储,并在工作单元中初始化上下文,为仓储单元提供上下文对象,由此确保同一上下文对象。

    2.3K10

    ASP.NET Core 6框架揭秘实例演示:中间件的多种定义方式

    [S1508]查看默认注册的服务 ASP.NET Core框架本身在构建请求处理管道之前会注册一些必要的服务,这些公共服务除了供框架自身消费外,也可以供应用程序使用。...图2 ASP.NET Core框架注册的公共服务 [S1509]中间件类型的构造函数注入 在构造函数或者约定的方法中注入依赖服务对象是主要的服务消费方式。...对于以处理管道为核心的ASP.NET Core框架来说,依赖注入主要体现在中间件的定义上。...由于ASP.NET Core框架在创建中间件对象并利用它们构建整个管道时,所有的服务都已经注册完毕,所以注册的任何一个服务都可以采用如下的方式注入到构造函数中。...在一个ASP.NET Core应用中,如果将服务的生命周期注册为Scoped模式,我们希望服务实例真正采用基于请求的生命周期模式。

    92040

    .NET 5.NET Core使用EF Core 5连接MySQL数据库写入读取数据示例教程

    本文首发于《.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程》 前言 在.NET Core/.NET 5的应用程序开发...而将.NET Core/.NET 5应用程序与SQL Server数据库的ORM组件有微软官方提供的EF Core(Entity Framework Core),也有像SqlSugar这样的第三方ORM...本文将为大家分享的是在.NET Core/.NET 5应用程序中使用EF Core 5连接MySQL数据库的方法和示例。...创建示例项目 使用Visual Studio 2019(当然,如果你喜欢使用VS Code也是没有问题的,笔者还是更喜欢在Visual Studio编辑器中编写.NET代码)创建一个基于.NET 5的Web...谢谢你的阅读,希望本文的.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据的示例对你有所帮助。

    8.8K42

    EF Core 实现读写分离的最佳方案

    而最近要迁移到新系统中,新系统使用.net core和EF Core进行数据访问. 所以趁着假期拿出一两天时间研究了一下如何EF Core进行读写分离....最简单的思路就是使用手动切换EF Core上下文的连接, 即context.Database.GetDbConnection().ConnectionString = "xxx", 但必须要先创建上下文...因此, 在上下文实例化时,就传入相应的数据库连接字符串, 这样一来DbContext的创建就需要交由我们自己来进行, 就不是由DI容器进行创建了...., string dbName = null); } IDbProvider 接口, 根据上下文类型和配置文件中的数据库连接字符串名称创建IUnitOfWork, 在DI中的生命周期是Scoped...dbConnectionOptions.DatabaseType); if (dbUser == null) { throw new Exception($"无法解析类型为

    2.6K00

    .NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记

    异步操作对于在丰富的客户端应用程序中保持响应式 UI 非常重要,并且还可以增加 web 应用程序中的吞吐量,在这些应用程序中,它们可释放线程以处理 web 应用程序中的其他请求 var blog = new...上下文池可以通过重复使用上下文实例,而不是为每个请求创建新实例,从而提高大规模方案(如 web 服务器)的吞吐量。...请求处理完成后,实例的任何状态都将被重置,并且实例本身会返回池中。 避免在维护状态的应用程序中使用上下文池。例如,不应在请求之间共享的上下文中的私有字段。...tabs=data-annotations 在模型中包含类型 class MyContext : DbContext { // 对应一张表(推荐) public DbSet...tabs=data-annotations 按照约定,将名为 Id 或的属性 Id 配置为实体的主键。

    1.4K20

    .NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记

    /connection-strings 在 ASP.NET Core 配置系统非常灵活,并且可以将连接字符串存储在 appsettings.json 、环境变量、用户密钥存储或其他配置源中 appsettings.json...异步操作对于在丰富的客户端应用程序中保持响应式 UI 非常重要,并且还可以增加 web 应用程序中的吞吐量,在这些应用程序中,它们可释放线程以处理 web 应用程序中的其他请求 var blog = new...上下文池可以通过重复使用上下文实例,而不是为每个请求创建新实例,从而提高大规模方案(如 web 服务器)的吞吐量。...请求处理完成后,实例的任何状态都将被重置,并且实例本身会返回池中。 避免在维护状态的应用程序中使用上下文池。 例如,不应在请求之间共享的上下文中的私有字段。...tabs=data-annotations 按照约定,将名为 Id 或的属性 Id 配置为实体的主键。

    1.3K11

    Entity Framework Core 2.0 新特性

    : 在生成SQL时,该方法的名称将用作函数的名称(在本例中为用户定义的函数),但在方法注册期间可以覆盖名称和模式 目前只支持标量功能 必须自行在数据库中创建映射函数,EF Core迁移不会对其进行创建...2.性能提升方面 2.1DbContext连接池 在ASP.NET Core程序中我们使用EF Core一般都是将自定义DbContext类型注册到依赖注入系统中,然后通过控制器中的构造函数参数获取该类型的实例...这意味着为每个请求创建一个新的DbContext实例。 所以在版本2.0中,我们引入了一种在依赖注入中注册自定义DbContext类型的新方式,它透明地引入了一个可重用的DbContext实例池。...一旦请求处理完成,实例上的任何状态都将重置,并且实例本身返回到池中。 这在思想概念上类似于ADO.NET中连接池的运作方式,并且能节省DbContext实例初始化成本。...虽然EF Core通常可以根据查询表达式的散列表示自动编译和缓存查询,但这种机制可以通过绕过哈希计算和高速缓存查找来获得小的性能增益,从而允许应用程序使用已经通过调用委托编译了查询。

    5.1K90

    asp.net core之EfCore

    EF Core(Entity Framework Core)是一个轻量级、跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中访问和操作数据库。...它是Entity Framework的下一代版本,专为.NET Core应用程序而设计。...EF Core提供了一种简单、灵活和高效的方式来与各种数据库进行交互,它通过将数据库表映射为.NET对象,并提供了一组强大的查询语言和操作API,使开发人员能够以面向对象的方式进行数据库操作。...本文是一个简单的EF Core教程,演示了如何使用EF Core进行数据库操作。 1. 安装EF Core 首先,创建一个WebApi项目,我们需要安装EF Core。...该类包含了Id、Name和Price属性,分别对应数据库表中的列。 3. 创建数据库上下文 接下来,我们需要创建一个派生自DbContext的数据库上下文类,用于定义数据库的连接和数据集。

    1.6K30
    领券