介绍

提到 ASP.NET Core,我们多半会想到 ASP.NET MVC、ASP.NET Web API、Razor page 及 Blazor。随着 .NET Core 3.0 的推出,今天会介绍一个全新推出的功能:Work Service 。我们可以在 Visual Studio 2019 中通过预定的项目模版快速创建一个 WorkService项目。

或者使用 .NET CLI:

> dotnet new worker -o myWorkServiceProject

-o 是一个可选标志,用于指定项目输出文件夹名称。关于 Work Service 模版的更多信息可以参考:WorkService。  

示例

首先我们创建一个 .NET Core 控制台程序。

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

注意事项:

  • 从 ASP.NET Core 3.0 起 WebHost 将被更通用的 Host 取代。
  • CreateHostBuilder 创建主机并在 ConfigureServices 中调用 AddHostedService<T> 来配置它。

Worker 类继承了 BackgroundService 下面贴出代码:

public class Worker : BackgroundService
{// ...protected override async Task ExecuteAsync(CancellationToken stoppingToken){// do stuff here
   }
}

我们可以通过 override ExecuteAsync 来完成自己要做的事情。

接下来我们添加一个日志组件,用于记录日志:

using Microsoft.Extensions.Logging;

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

添加完日志组件后,我们可以在 Worker 类的构造函数中注入日志记录器:

private readonly ILogger<Worker> _logger;public Worker(ILogger<Worker> logger)
{this._logger = logger;
}

运行

注意:我们需要以管理员模式打开 Powershell 或 cmd 窗口。在运行之前我们需要在入口添加或确认有对 UseWindowsService() [早期此方法的名称是:UseServiceBaseLifetime()]的调用:

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

可通过给 UseWindowsService 方法传递参数设置 Windows 服务。

发布

dotnet publish -o C:\path\to\project\pubfolder

将程序发布到 pubfolder 文件夹中以后,我们开始通过 sc.exe 创建 Windows 服务。

> C:\Windows\System32\sc create MyServiceName binPath=C:\path\to\project\pubfolder\MyProjectName.exe

服务创建完成后,它会出现在Windows 服务列表中,当我们手动启动服务时,应该会看到日志的输出:

info: WorkerServiceSample.Worker[0]Making doc 1 at: 06/09/2019 00:09:52 -04:00
Making your document...
info: WorkerServiceSample.Worker[0]Making doc 2 at: 06/09/2019 00:10:05 -04:00
Making your document...
info: Microsoft.Hosting.Lifetime[0]Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]Hosting environment: Development

注意:在非 Windows 平台上调用 UseWindowsService 方法也是不会报错的,非 Windows 平台会忽略此调用。

以上就是介绍的全部内容了。如果想用 .NET Core 开发 Windows 服务的,不防试试看。

转载于:https://www.cnblogs.com/jRoger/p/11007826.html

Worker Service in ASP .NET Core相关推荐

  1. .NET 中的 Worker Service 入门介绍

    翻译自 Steve Gordon 2020年3月30日的文章 <WHAT ARE .NET WORKER SERVICES?> [1] 随着 .NET Core 3.0 的发布,ASP.N ...

  2. Dependency injection in ASP.NET Core

    原文 github地址 ASP.NET Core supports the dependency injection (DI) software design pattern, which is a ...

  3. ASP.NET Core 中文文档 第三章 原理(12)托管

    原文:Hosting 作者:Steve Smith 翻译:娄宇(Lyrics) 校对:何镇汐.许登洋(Seay) 为了运行 ASP.NET Core 应用程序,你需要使用 WebHostBuilder ...

  4. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)

    上个月15日,上海MVP做了一次线下的技术分享活动,我分享的主题是<快速构建容器化的ASP.NET Core应用程序>,有关这次活动的简报,可以参考这里.另外,我的主题分享的PPT也可以点 ...

  5. 在 Asp.Net Core 中使用 worker services

    ASP.Net Core 3.0 Preview 3 新增了一个 worker services,那什么是 worker services 呢?它如同 windows服务 或者 Linux守护进程 一 ...

  6. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目标 部署:掌握将aspnetcore程序成功发布到Azure Kubernetes Service(AKS)上 管理:掌握将AKS上的aspnetcore程序扩容.更新版本 准备工作 注册 Azur ...

  7. 如何在ASP.NET Core中使用Azure Service Bus Queue

    原文:USING AZURE SERVICE BUS QUEUES WITH ASP.NET CORE SERVICES 作者:damienbod[1] 译文:如何在ASP.NET Core中使用Az ...

  8. 在Azure Container Service创建Kubernetes(k8s)群集运行ASP.NET Core跨平台应用程序

    引子 在此前的一篇文章中,我介绍了如何在本地docker环境中运行ASP.NET Core跨平台应用程序,看起来非常不错,不是吗?那么,如果我们希望真正在实际的生产环境去部署和运行这个应用程序,应该怎 ...

  9. .NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

    我们都知道在6月12日的时候微软发布了.NET Core 3.0的第6个预览版.针对.NET Core 3.0的发布我们国内的微软MVP-汪宇杰还发布的官翻版的博文进行了详细的介绍.具体的可以关注&q ...

最新文章

  1. 如何将代码优雅的放在WORD文档中?
  2. Appium自动化测试-iOS真机运行
  3. VLC播放器web插件接口(Part1)
  4. java实现插入排序 1
  5. 【Asp.net】Cookie对象
  6. OpenCV编译安装
  7. 菜鸟学习笔记:Java提升篇2(容器2——Map、Set、迭代器)
  8. 1、《java就业培训教程》-张孝祥
  9. AlphaGo浅析——浅析卷积神经网络
  10. MOT-Machine Learning Methods for Solving Assignment Problems in Multi-Target Tracking
  11. 单独开一贴个人认为是编译器缺陷希望有人提交给微软
  12. 鸿蒙系统能玩魔兽世界吗,魔兽世界TBC燃烧远征测试服,H英雄本的装备2小时内可以交易, 亲友们可以互相毛装备了...
  13. 四.C++网络安全学院之高级语言和低级语言
  14. linux安装识别不到scsi硬盘,Linux下不重起识别SCSI硬盘
  15. android英雄无敌 中文版下载地址,英雄无敌3手机版
  16. 如何将华为云服务器重做系统并保留其中的指定数据
  17. 近红外荧光染料IRDye 650 NHS Ester/NHS活化酯
  18. ROLAP vs MOLAP vs HOLAP
  19. AD绘制怎么画3D封装库?
  20. DPP Substrate 1中英文说明书

热门文章

  1. Perl匿名数组、hash和autovivification特性
  2. rsync 服务与配置文档
  3. linux下安装mysql5.7.17及简单配置
  4. 利用binlog进行数据库的还原
  5. 端口映射的几种实现方法
  6. 机房收费系统--登录窗体
  7. 如何选择 Git 分支模式?
  8. 如何快速安全的插入千万条数据?
  9. SpringBoot是如何解析HTTP参数的?
  10. Spring Boot 2.1.0 已发布,7 个重大更新! 1