您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页.NET Core Generic Host项目使用Topshelf部署为Windows服务

.NET Core Generic Host项目使用Topshelf部署为Windows服务

来源:伴沃教育

1..NET Core Generic Host是什么?

在.NET Core 2.1版本加入了一种新的Host,即Generic Host(通用主机)。

现在在2.1版本的Asp.Net Core中,有了两种可用的Host:

  • Web Host:适用于托管Web程序的Host,就是我们所熟悉的在Asp.Net Core应用程序的Mai函数中用CreateWebHostBuilder创建出来的常用的WebHost。
  • Generic Host:(ASP.NET Core 2.1版本才有) – 适用于托管非 Web 应用(例如,运行后台任务的应用)。 在未来的版本中,通用主机将适用于托管任何类型的应用,包括 Web 应用。

2.具体实现

因为我的windows服务是一个后台一直执行的服务,所有在服务设计上我采用BackgroundService类型。

(1)重写IHostLifeTime,改变程序的生命周期

框架中支持ConsoleLifetime。如果想要替换这个,需要实现IHostLifetime来管理生命周期。

 

internal class TopshelfLifetime : IHostLifetime
    {
        public TopshelfLifetime(IApplicationLifetime applicationLifetime, IServiceProvider services)
        {
            ApplicationLifetime = applicationLifetime ?? throw new ArgumentNullException(nameof(applicationLifetime));
        }

        private IApplicationLifetime ApplicationLifetime { get; }

        public Task WaitForStartAsync(CancellationToken cancellationToken)
        {
            return Task.CompletedTask;
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            return Task.CompletedTask;
        }
    }

(2)实现自己的服务

public class TestService : BackgroundService
{
  protected override Task ExecuteAsync(CancellationToken stoppingToken)
   {
      //....
   }
}

(3)在Main函数里面注入

 .ConfigureServices((hostContext, services) =>
   {
       // 注入服务
       services.AddSingleton<IHostLifetime, TopshelfLifetime>();
       services.AddHostedService<TestService>();
   })

3.部署windows服务

在项目 csproj 文件夹下,打开控制台窗口(管理员角色)

 输入命令:

dotnet publish -c release -r win-x
.\TestService.exe install

此时,windows服务已经创建好了,但是还是没有启动,所以需要输入命令启动:

net statrt TestService(服务名称)

至此,windows服务部署完成,且后台运行。

转载于:https://www.cnblogs.com/walt/p/11447842.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务