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

打印 上一主题 下一主题

主题 888|帖子 888|积分 2664

在日常开发中,并不是所有的功能都是用户可见的,还在一些背后默默支持的程序,这些程序通常以服务的形式出现,统称为辅助脚色服务。本日以一个简单的小例子,简述基于.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 节点添加到项目文件:
  1. <PropertyGroup>
  2.     <ServerGarbageCollection>true</ServerGarbageCollection>
  3. </PropertyGroup>
复制代码
 
注入组件

 
在本示例中,起首通过Nuget包管理器进行安装,须要安装的组件有两个:
1. 采用后台日志记录信息,须要安装NLog对Microsoft.Extensions.Logging的扩展。
2. 因为本示例是须要部署成Windows服务,所以须要安装Microsoft.Extensions.Hosting.WindowsServices。
Nuget包管理器页面如下所示:

在Program中应用Windows服务,并注入NLog组件,如下所示:
  1. using NLog.Extensions.Logging;
  2. namespace DemoWorkerService
  3. {
  4.     public class Program
  5.     {
  6.         public static void Main(string[] args)
  7.         {
  8.             IHost host = Host.CreateDefaultBuilder(args)
  9.                 .UseWindowsService()
  10.                 .ConfigureServices(services =>
  11.                 {
  12.                     services.AddHostedService<Worker>();
  13.                     services.AddLogging(logging =>
  14.                     {
  15.                         logging.AddNLog();
  16.                     });
  17.                 })
  18.                 .Build();
  19.             host.Run();
  20.         }
  21.     }
  22. }
复制代码
 
辅助脚色类

 
通过模板创建的项目中,默认提供了一下Worker类,此类是BackgroundService的派生类,重要提供StartAsync,ExecuteAsync,StopAsync三个方法可供重写。如下所示:
  1. namespace DemoWorkerService
  2. {
  3.     public class Worker : BackgroundService
  4.     {
  5.         private readonly ILogger<Worker> _logger;
  6.         public Worker(ILogger<Worker> logger)
  7.         {
  8.             _logger = logger;
  9.         }
  10.         public override Task StartAsync(CancellationToken cancellationToken)
  11.         {
  12.             _logger.LogInformation("Worker start at: {time}", DateTimeOffset.Now);
  13.             return base.StartAsync(cancellationToken);
  14.         }
  15.         protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  16.         {
  17.             while (!stoppingToken.IsCancellationRequested)
  18.             {
  19.                 _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
  20.                 await Task.Delay(1000, stoppingToken);
  21.             }
  22.         }
  23.         public override Task StopAsync(CancellationToken cancellationToken)
  24.         {
  25.             _logger.LogInformation("Worker stop at: {time}", DateTimeOffset.Now);
  26.             return base.StopAsync(cancellationToken);
  27.         }
  28.     }
  29. }
复制代码
 
创建服务并运行

 
程序开发完成后,可根据现实项目须要打包到指定目次下,然后通过服务管理器命令创建服务,如下所示:
以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辅助脚色服务入门简介】的全部内容。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表