.NET CORE 3.0新增了Worker Services的新项目模板,可以编写长时间运行的后台服务,并且能轻松的部署成windows服务或linux守护程序。如果安装的vs2019是中文版本,Worker Services变成了辅助角色服务。Worker Services 咱也不知道怎么翻译成了这个名称,咱也不敢乱翻译,下文就保持原名称。。。,本文将会演示如何创建一个Worker Services项目,并且部署为windows服务或linux守护程序运行;

开始创建worker service 项目

创建新项目——》选择辅助角色服务

项目创建成功之后,您会看到创建了两个类:Program和Worker。

Program.cs

public static void Main (string[] args) {
CreateHostBuilder (args).Build ().Run ();
} public static IHostBuilder CreateHostBuilder (string[] args) =>
Host.CreateDefaultBuilder (args)
.ConfigureServices ((hostContext, services) => {
services.AddHostedService<Worker> ();
});

Program类跟ASP.NET Core Web应用程序非常类似,不同之处没有了startup类,并且把worker服务添加到DI container中。

Worker.cs

public class Worker : BackgroundService {
private readonly ILogger<Worker> _logger; public Worker (ILogger<Worker> logger) {
_logger = logger;
} protected override async Task ExecuteAsync (CancellationToken stoppingToken) {
while (!stoppingToken.IsCancellationRequested) {
_logger.LogInformation ("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay (, stoppingToken);
}
}
}

如果你看到这段文字,说明您正使用RSS阅读或转自《一棵树-博客园》,原文地址:https://www.cnblogs.com/atree/p/netcore-worker-service.html

worker只是一个简单的类,它继承自BackgroundService ,而后者又实现IHostedService接口。

默认的worker演示,没隔1秒,循环打印运行的时间。

部署为Windows服务运行

1.在项目中添加nuget包:Microsoft.Extensions.Hosting.WindowsServices

2.然后在program.cs内部,将UseWindowsService()添加到CreateHostBuilder

public static IHostBuilder CreateHostBuilder (string[] args) =>
Host.CreateDefaultBuilder (args)
.UseWindowsService ()
.ConfigureServices ((hostContext, services) => {
services.AddHostedService<Worker> ();
});

3.执行一下命令发布项目

dotnet publish  -c Release -o C:\WorkerPub

4.然后使用sc.exe工具来管理服务,输入一下命令创建为windows服务

sc.exe create DemoWorkService binPath=C:\WorkerPub\WorkerService1.exe

查看服务状态使用一下命令

sc.exe query DemoWorkService 

启动命令

sc.exe start DemoWorkService 

在服务列表查看,DemoWorkService已安装成功

停用 、删除命令

sc.exe stop DemoWorkService
sc.exe delete DemoWorkService

部署作为Linux守护程序运行

部署linux守护程序也是很方便的执行一下两个步骤即可:

  • 添加Microsoft.Extensions.Hosting.Systemd NuGet包到项目中,并告诉你的新Worker,其生命周期由systemd管理!
  • 将UseSystemd()添加到主机构建器中
public static IHostBuilder CreateHostBuilder (string[] args) =>
Host.CreateDefaultBuilder (args)
.UseSystemd ()
.ConfigureServices ((hostContext, services) => {
services.AddHostedService<Worker> ();
});

.NET Core创建Worker Services的更多相关文章

  1. .NET Core3.0创建Worker Services

    .NET CORE 3.0新增了Worker Services的新项目模板,可以编写长时间运行的后台服务,并且能轻松的部署成windows服务或linux守护程序.如果安装的vs2019是中文版本,W ...

  2. 使用.NET Core创建Windows服务 - 使用.NET Core工作器方式

    原文:Creating Windows Services In .NET Core – Part 3 – The ".NET Core Worker" Way 作者:Dotnet ...

  3. Worker Services的新项目模板

    .NET Core3.0创建Worker Services2019-10-24 09:05  成天  阅读(1438)  评论(20)  编辑收藏 .NET CORE 3.0新增了Worker Ser ...

  4. 在 ASP.NET Core和Worker Service中使用Quartz.Net

    现在有了一个官方包Quartz.Extensions.Hosting实现使用Quartz.Net运行后台任务,所以把Quartz.Net添加到ASP.NET Core或Worker Service要简 ...

  5. 使用.NET Core创建Windows服务(二) - 使用Topshelf方式

    原文:Creating Windows Services In .NET Core – Part 2 – The "Topshelf" Way 作者:Dotnet Core Tut ...

  6. .NET Core 创建Windows服务

    .NET Core 创建Windows服务 作者:高堂 原文地址:https://www.cnblogs.com/gaotang/p/10850564.html 写在前面 使用 TopShelf+Au ...

  7. 使用.NET Core创建Windows服务(一) - 使用官方推荐方式

    原文:使用.NET Core创建Windows服务(一) - 使用官方推荐方式 原文:Creating Windows Services In .NET Core – Part 1 – The &qu ...

  8. 【EFCore】利用Entityframework Core创建数据库模型

    利用Entityframework Core创建数据库模型 本文中Entityframework Core版本为v3.1.6 简介 Entity Framework (EF) Core 是微软轻量化. ...

  9. 温故知新,使用ASP.NET Core创建Web API,永远第一次

    ASP.NET Core简介 ASP.NET Core是一个跨平台的高性能开源框架,用于生成启用云且连接Internet的新式应用. 使用ASP.NET Core,您可以: 生成Web应用和服务.物联 ...

随机推荐

  1. A Pattern Language for Parallel Programming

    The pattern language is organized into four design spaces.  Generally one starts at the top in the F ...

  2. Restful API接口规范

    1. 域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下. https://example.org ...

  3. C#关键字 const与readonly

    ====const==== const关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量而且不能修改.常量可以为数字.布尔值.字符串或null引用. 常数声明的类型指定声明引入的成 ...

  4. Java性能 -- 线程上下文切换

    线程数量 在并发程序中,并不是启动更多的线程就能让程序最大限度地并发执行 线程数量设置太小,会导致程序不能充分地利用系统资源 线程数量设置太大,可能带来资源的过度竞争,导致上下文切换,带来的额外的系统 ...

  5. BUUCTF--checkin

    文件上传文件上传一般验证方式:1.本地js验证(客户端)2.MIME验证(服务端)3.拓展名验证(服务端)4.脚本内容(文件头)验证(服务端) 通常会用到exif_imagetype()函数,这个函数 ...

  6. ubuntu下编译android jni到so库的mk文件配置

    项目根目录下的Android.mk文件 LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional L ...

  7. jQuery的animate

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. linux 进程通信之 守护进程

    守护进程(Daemon) Daemon(精灵)进程,是linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间.一般采用以d结尾的名字.从下面的进程信息可以看出, ...

  9. Python元组与字符串操作(9)——随机数、元组、命名元组

    随机数 import random #导入random模块 randint(a,b) 返回[a,b]之间的整数 random.randint(0,9) randrange([start],stop,[ ...

  10. 关于宝塔一个站点绑定多个域名宝塔ssl证书的问题

    目前“宝塔SSL”自动申请绑定一个证书,即根域名和www域名,如果还需要绑定手机端m则需要绑定多个域名如果多域名绑定一个网站数据,需要新建多个站点指向同一文件目录. 用相同的方法,在不新建站点的前提下 ...