首页 > 其他分享 >.NET辅助角色服务入门简介

.NET辅助角色服务入门简介

时间:2024-08-15 15:51:45浏览次数:11  
标签:服务 入门 简介 Worker 所示 辅助 NET DemoWorkerService

在日常开发中,并不是所有的功能都是用户可见的,还在一些背后默默支持的程序,这些程序通常以服务的形式出现,统称为辅助角色服务。今天以一个简单的小例子,简述基于.NET开发辅助角色服务的相关内容,仅供学习分享使用,如有不足之处,还请指正。

 

概述

 

根据项目需求不同,创建长时间运行的服务的原因有很多,例如:

  • 处理 CPU 密集型数据,比如文件检索或图片识别等。
  • 在后台对工作项进行排队,比如:批量发送短信或邮件等操作。
  • 按计划执行基于时间的操作,比如:间隔2秒执行一次某操作。

后台服务处理通常不涉及用户界面 (UI),但可以围绕它们来构建 UI。 在早期使用 .NET Framework 时,Windows 开发人员可能出于这些目的创建 Windows 服务。 现在通过 .NET,你可以使用 BackgroundService(它是 IHostedService 的实现)或实现自己的服务。

 

涉及知识点

 

在辅助角色服务中,许多术语被误用为同义词。 本文分定义了其中一些术语,以使其在本文中的意图更为直观。

  • 后台服务:BackgroundService 类型。
  • 托管服务:IHostedService 的实现或 IHostedService 本身。
  • 长时间运行的服务:持续运行的任何服务。
  • Windows 服务:Windows 服务基础结构,最初以 .NET Framework 为中心,但现在可通过 .NET 访问。
  • 辅助角色服务:辅助角色服务模板。

 

创建项目

 

1. 选择模板

 

在Visual Studio开发工具中,新建项目,在项目模板中选择“辅助角色服务”模板,然后点击下一步,打开项目配置页面,如下所示:

 

2. 配置新项目

 

在项目配置页面,输入项目名称,位置,然后点击下一步,所下所示:

 

3. 选择框架

 

选择辅助角色服务需要的框架,本示例选择VisualStudio2022默认的.NET 6.0(长期支持)。不使用顶级语句,可根据具体情况进行勾选,建议勾上。如下图所示:

 

项目结构

 

项目创建成功后,如下所示:

  • 默认框架创建的辅助角色服务,自动添加了Microsoft.Extensions.Hosting包。
  • Program 类,包含了程序入库 main函数。在函数内注入了Worker服务。
  • Worker表示一个后台运行服务,继承自BackgroundService,重写ExecuteAsync方法,主要用于业务逻辑处理。

具体如下所示:

默认情况下,辅助角色模板不启用服务器垃圾回收 (GC),因为有很多因素决定了这样做的必要性。 所有需要长时间运行服务的场景都应考虑此默认设置对性能的影响。 若要启用服务器 GC,将 ServerGarbageCollection 节点添加到项目文件:

<PropertyGroup>
    <ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>

 

注入组件

 

在本示例中,首先通过Nuget包管理器进行安装,需要安装的组件有两个:

1. 采用后台日志记录信息,需要安装NLog对Microsoft.Extensions.Logging的扩展。

2. 因为本示例是需要部署成Windows服务,所以需要安装Microsoft.Extensions.Hosting.WindowsServices。

Nuget包管理器页面如下所示:

在Program中应用Windows服务,并注入NLog组件,如下所示:

using NLog.Extensions.Logging;

namespace DemoWorkerService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            IHost host = Host.CreateDefaultBuilder(args)
                .UseWindowsService()
                .ConfigureServices(services =>
                {
                    services.AddHostedService<Worker>();
                    services.AddLogging(logging =>
                    {
                        logging.AddNLog();
                    });
                })
                .Build();

            host.Run();
        }
    }
}

 

辅助角色类

 

通过模板创建的项目中,默认提供了一下Worker类,此类是BackgroundService的派生类,主要提供StartAsync,ExecuteAsync,StopAsync三个方法可供重写。如下所示:

namespace DemoWorkerService
{
    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }

        public override Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Worker start at: {time}", DateTimeOffset.Now);
            return base.StartAsync(cancellationToken);
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(1000, stoppingToken);
            }
        }

        public override Task StopAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Worker stop at: {time}", DateTimeOffset.Now);
            return base.StopAsync(cancellationToken);
        }
    }
}

 

创建服务并运行

 

程序开发完成后,可根据实际项目需要打包到指定目录下,然后通过服务管理器命令创建服务,如下所示:

以Windows平台为例:

使用sc.exe工具来管理服务,输入一下命令创建为windows服务
sc.exe create DemoWorkerService binPath=D:\Test\DemoWorkerService\DemoWorkerService.exe
DemoWorkerService 服务名称
D:\Test\DemoWorkerService\DemoWorkerService.exe 生成的运行文件
查看服务状态使用一下命令
sc.exe query DemoWorkerService
启动命令
sc.exe start DemoWorkerService

 可以通过命令行进行启动服务,如下所示:

或者在服务管理窗口,选择服务右键点击启动,如下所示:

 

注意:以上命令行窗口以管理员身份运行,否则可能会出现权限不足的问题。 

打开程序的运行目录,可以看到日志已正常运行,如下所示:

 以上【.NET辅助角色服务入门简介】的全部内容。

 

标签:服务,入门,简介,Worker,所示,辅助,NET,DemoWorkerService
From: https://www.cnblogs.com/hsiang/p/18356927

相关文章

  • 亮相2024 DPU&AI Networking创新大会,天翼云斩获两项大奖!
    近日,以“智驱网络芯动未来”为主题的2024DPU&AINetworking创新大会在北京举办。大会表彰了在DPU与AI网络技术创新及实践应用中取得卓越成就的单位与项目,天翼云科技有限公司荣膺创新引擎奖、《紫金DPU算力卸载与网络加速应用》荣获实践先锋奖,技术创新实力以及应用实践成果再获行......
  • Docker入门教程:10分钟掌握基础
    Docker入门教程:10分钟掌握基础1.Docker是什么?Docker是一种容器化技术,它允许开发者打包他们的应用以及应用的依赖环境到一个可移植的容器中,这个容器可以在任何支持Docker的操作系统上运行。2.Docker的基本组成镜像(Image):一个只读的模板,用于创建Docker容器。容器(Containe......
  • Go 链路追踪入门 Opentelemetry
    前言Opentelemetry分布式链路跟踪( DistributedTracing)的概念最早是由Google提出来的,发展至今技术已经比较成熟,也是有一些协议标准可以参考。目前在Tracing技术这块比较有影响力的是两大开源技术框架:Netflix公司开源的OpenTracing和Google开源的OpenCensus。两大框架......
  • c# net爬取百度热搜
    varurl="https://top.baidu.com/board?tab=realtime";//百度using(varhttpClient=newHttpClient()){varresponse=awaithttpClient.GetStringAsync(url);varhtmlDocument=newHtmlDocument();htmlDocument.LoadHtml(response);varcategoryWrapN......
  • TeeChart.NET 4.2024.7.29 Crack
    Versatilenative.NETCharting,MapandGaugecontrolTheTeeChartNETProEditionisaNugetbasedChartingcontroldesignedtoofferinstantchart,mapandgaugecapabilitiestoyourNETapplication.Withdozensofcharttypes,statisticalfunctionsand......
  • 第38课 Scratch入门篇:绘制抛物线
    画正多边形故事背景: 神奇的抛物线程序原理: 抛物线在坐标轴的上体现内容是X坐标等值增加,Y坐标是线增加到达一个峰值后然后减少。我们可以通过X,Y坐标值的增加减少实现坐标的效果,然后通过画笔绘制出来!开始编程1、删除预设的猫咪角色,加入棒球角色,扩展模块的画笔......
  • 第39课 Scratch入门篇:绘制折线图
    画正多边形故事背景: 神奇的折线图程序原理: 为了实现折线图变化的数字,我们把30个随机数加入到列表中,通过读取列表中的随机数作为Y坐标,X坐标均匀增加来绘制图形。开始编程1、删除预设的猫咪角色,绘制一个空白的角色,增加一个自制积木名称为xy轴。2、绘制折线......
  • 零基础STM32单片机编程入门(三十四) JDY-31蓝牙模块实战含源码
    文章目录一.概要二.JDY-31蓝牙模块主要性能参数三.JDY-31蓝牙模块主芯片BK3432内部框图四.BK3432参考设计五.JDY-31蓝牙模块与单片机通讯方法1.与STM32F103板子硬件连接2.JDY-31蓝牙模块AT指令介绍六.STM32单片机与JDY-31蓝牙模块通讯实验1.硬件准备2.软件工程3.软......
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)1.5-1.
    目录第四门课卷积神经网络(ConvolutionalNeuralNetworks)第一周卷积神经网络(FoundationsofConvolutionalNeuralNetworks)1.5卷积步长(Stridedconvolutions)1.6三维卷积(Convolutionsovervolumes)第四门课卷积神经网络(ConvolutionalNeuralNetworks)第一周......
  • 【Python快速入门和实践011】Python常用脚本-目标检测之VOC格式转YOLO格式脚本
    一、数据集介绍        NEU-DET数据集是由东北大学(NortheasternUniversity,简称NEU)发布的一个用于钢材表面缺陷检测的数据集。这个数据集特别设计用于支持和促进工业领域中的缺陷检测研究。NEU-DET数据集的一些主要特点包括:多样性和复杂性:数据集包含了多种类型......