【愚公系列】2022年5月 ASP.NET Core下Worker Service构建系统服务实现任务调度

【愚公系列】2022年5月 ASP.NET Core下Worker Service构建系统服务实现任务调度使用vs2019创建WorkerService程序首先nuget安装Microsoft.Extensions.Hosting.Windows在Program中添加UseWindowsService()publicclassProgram{publicstaticvoidMain(string[]args){CreateHostBuilder(args).Build().Run();}

大家好,又见面了,我是你们的朋友全栈君。


前言

当你想到ASP.NET Core时,可能会想到Web应用程序后端代码,包括MVC和WebAPI。MVC视图和Razor页面还允许使用后端代码生成带有HTML元素的前端UI。全新的Blazor更进一步,允许使用WebAssembly在Web浏览器中运行客户端.NET代码。最后,我们现在有了一个Worker Service应用程序的模板。

这是在ASP.NET Core早期预览中引入的。虽然项目模板最初列在Web模板下,但此后在向导中重新定位了一个级别。这是在.NET Core中创建长时间运行的跨平台服务的好方法。

命令行创建如下

dotnet new worker -o myproject

一、ASP.NET Core Worker Service构建系统服务实现任务调度

1.安装对应包

使用vs2022创建Worker Service程序,nuget安装如下包:

Microsoft.Extensions.Hosting.WindowsServices

在这里插入图片描述

2.添加window服务扩展

在Program中添加UseWindowsService()

worker service 的默认实现包含了两个类:Program 和 Worker 类, Program 类的功能差不多是合成了 传统的 Asp.Net Core 上的 Program + Startup 两个类的功能,还有一个专门用于写业务逻辑的 Worker 类,下面是 Program 类的实现,可以着重看一下 AddHostedService 是如何使用的。

IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    { 
   
        services.AddHostedService<Worker>();
    }).UseWindowsService()
    .Build();

await host.RunAsync();

在这里插入图片描述

实际任务执行代码Worker类

Work 类提供了对 依赖注入 的支持,它继承于 Microsost.Extensions.Hosting.Abstractions 命名空间下的 BackgroundService,这个抽象的 BackgroundService 类又实现了 IHostedService 接口,还可以看出这个抽象类定义了四个方法声明:StartAsync,StopAsync,ExecuteAsync,Dispose。

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)
        { 
   
            //实际要执行的任务代码
            await Task.Delay(8640000, stoppingToken);
        }
    }
}

3.发布部署服务到windows

发布选择独立安装,win-64。不选这独立安装服务器需要有对应的.NET Core运行时
在这里插入图片描述

发布程序后在程序目录用cmd执行以下代码

sc.exe create 服务名称 binpath=xxxx.exe

二、Worker Service 日志功能

要想在 worker service 中记录日志,可以添加 Microsoft.Extensions.Logging 程序集,默认的 worker service 是 ConsoleLogger,也就是仅记录到 控制台 上,实际业务中不可能这么玩,如果想记录到其他地方该怎么做呢?比如 Windows Events 中,要这么做的话,可以使用 EventLog,在 nuget 上添加 Microsoft.Extensions.Logging.EventLog 包即可。

下面的代码片段展示了如何在 CreateHostBuilder 方法中进行配置将这个log记录到 event 中。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logFactory => logFactory.AddEventLog())
        .ConfigureServices(services =>
        { 
   
            services.AddHostedService<Worker>();
        }); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157244.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 数据库image型输出图片

    有一些程序在sqlserver中存储图片的方式是通过二进制存储导数据库的,那么保存进去之后,怎么把图片显示出来呢?直接上代码,servlet后台代码:byte[]b1=””;//数据库查询出来的二进制InputStreamin=newByteArrayInputStream(b1);response.setContentType(“image/jpg”);Outpu…

    2022年4月15日
    46
  • 这7个web前端开发写代码软件,你过用几个?[通俗易懂]

    群里的朋友,经常问到web前端开发写代码用那个软件好?今天在这里统一回答下,主流的web前端开发写代码的软件有这些Webstorm、Vscode、SublimeText、HBuilder、Dreamweaver、notepad++、editplus等,做前端这么多年了,下面谈下我的使用感受吧。1.WebStorm【推荐】WebStorm是jetbra…

    2022年4月11日
    79
  • Blob对象详解

    Blob对象详解第一步 聊聊概念 Blob BinaryLargeO 对象代表了一段二进制数据 提供了一系列操作接口 其他操作二进制数据的 API 比如 File 对象 都是建立在 Blob 对象基础上的 继承了它的属性和方法 第二步 两种使用方式 生成 Blob 对象有两种方法 一种是使用 Blob 构造函数 另一种是对现有的 Blob 对象使用 slice 方

    2025年9月4日
    2
  • 什么是UDP攻击_机器人打电话营销效果

    什么是UDP攻击_机器人打电话营销效果UDP协议UDP是一个简单的面向数据报的运输层协议,也是最常见的作为流量攻击最多的一种协议,需要用到UDP的主要都是视频通讯,枪战类实时通讯的游戏类。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但并不保证它们能到达目的地。由于UDP传输数据前传输数据之前源端和终端不建立连接,且没有超时重发等机制,故而传输速度很快。UDP攻击UDP攻击是DDoS攻击的一种,是典型的流量型攻击。就好比学校中午放学时的食堂,学生大量飞奔食堂,但食堂窗口就那么多,学生数量太多,就只能挤在窗口前等待。

    2022年10月2日
    4
  • 三极管饱和的判断「建议收藏」

    三极管饱和的判断「建议收藏」三极管是电流放大器件,决定三极管是否饱和取决于Ib和Ic的相对大小,通常来讲Ic/Ib>hfe时,三极管饱和。因此导出以下结论:1.如何判断饱和?判断饱和时应该求出基级最大饱和电流IBS,然后再根据实际的电路求出当前的基级电流,如果当前的基级电流大于基级最大饱和电流,则可判断电路此时处于饱和状态。2.饱和的条件:1.集电极和

    2025年10月22日
    5
  • pytorch的安装及其在pycharm中的使用「建议收藏」

    pytorch的安装及其在pycharm中的使用「建议收藏」1.首先配置Anaconda虚拟环境在AnacondaPrompt中输入condacreate-npytorchpython==3.72.在该环境中安装pytorch因为前面已经安装了cuda10.0.130和cudnn,安装与之匹配的pytorch版本,官网中寻找,但是官网的貌似不太对,最后看的是这个回答pipinstalltorch==1.2.0torchvision==0.4.0-fhttps://download.pytorch.org/whl/torch_stab

    2022年8月25日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号