介绍

提到 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[]
Making doc at: // :: -:
Making your document...
info: WorkerServiceSample.Worker[]
Making doc at: // :: -:
Making your document...
info: Microsoft.Hosting.Lifetime[]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[]
Hosting environment: Development

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

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

Worker Service in ASP .NET Core的更多相关文章

  1. .NET 6学习笔记(3)——在Windows Service中托管ASP.NET Core并指定端口

    在上一篇<.NET 6学习笔记(2)--通过Worker Service创建Windows Service>中,我们讨论了.NET Core 3.1或更新版本如何创建Windows Ser ...

  2. ASP.NET Core Windows服务开发技术实战演练

    一.课程介绍 人生苦短,我用.NET Core!大家都知道如果想要程序一直运行在Windows服务器上,最好是把程序写成Windows服务程序:这样程序会随着系统的自动启动而启动,自动关闭而关闭,不需 ...

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

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

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

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

  5. Asp.Net Core入门之自定义服务注册

    谈到服务注册,首先我们先了解一下服务注册时使用的三种方式,也代表了不同的服务生命周期: AddTransient AddScoped AddSingleton AddSingleton生命周期最长,其 ...

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

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

  7. .NET Core中的Worker Service

    当你想到ASP.NET Core时,可能会想到Web应用程序后端代码,包括MVC和WebAPI.MVC视图和Razor页面还允许使用后端代码生成带有HTML元素的前端UI.全新的Blazor更进一步, ...

  8. 基于.Net Core 5.0 Worker Service 的 Quart 服务

    前言 看过我之前博客的人应该都知道,我负责了相当久的部门数据同步相关的工作.其中的艰辛不赘述了. 随着需求的越来越复杂,最近windows的计划任务已经越发的不能满足我了,而且计划任务毕竟太弱智,总是 ...

  9. 如何托管ASP.NET Core应用到Windows Service中

    (此文章同时发表在本人微信公众号"dotNET开发经验谈",欢迎右边二维码来关注.) 题记:正在构思一个中间件的设计,考虑是否既可以使用最新的技术,也可以兼顾传统的部署模式.所以有 ...

随机推荐

  1. 并查集_HDU 1232_畅通工程

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...

  2. jQuery表单校验

    主要特性: 表单提交前对所有数据进行校验,不符合不让提交(validate) 如果表单校验不通过,自动focus到第一个错误的域 自动在控件后面显示错误提示内容(error message) 支持根据 ...

  3. 仿LookUpEdit多列模糊搜索,功能比GridLookUpEdit强大,比SearhLookUpEdit方便

    先上效果图: 控件调用示例:(devexpress使用了16.2.6.0版本,可以根据实际需要进行版本转换) using System; using System.Collections.Generi ...

  4. TIJ学习--RTTI(Runtime-Time Type Identification)

    TIJ学习--RTTI(Runtime-Time Type Identification) RTTI 运行时类型检查机制 获取一个类的Class引用的三种方法 class TestClass{} Te ...

  5. StringBuffer类的delete()方法和deleteCharAt()方法的区别

    引言 StringBuffer类的delete()方法和deleteCharAt()方法都是用来删除StringBuffer字符串中的字符 区别 1.对于delete(int start,int en ...

  6. 蓝桥杯 2n皇后问题 深搜

    默认大家会了n皇后问题 基础练习 2n皇后问题   时间限制:1.0s   内存限制:512.0MB     问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和 ...

  7. js页面3秒自动跳转

    如何让当前页面3秒以后自动跳转到其他页面?JS页面自动跳转 想实现登陆后3秒自动跳转到某页的功能,在网上搜了一下,供以后使用 1.<script   language= "javasc ...

  8. 疯子的算法总结(三) STL Ⅱ迭代器(iterator) + 容器

    一.迭代器(Iterator) 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历. 定义:迭代器是一种检查容器内元素 ...

  9. c#链接数据库,查找数据信息

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  10. 富文本编辑器TinyMCE的使用(React Vue)

    富文本编辑器TinyMCE的使用(React Vue) 一,需求与介绍 1.1,需求 编辑新闻等富有个性化的文本 1.2,介绍 TinyMCE是一款易用.且功能强大的所见即所得的富文本编辑器. Tin ...