zoukankan      html  css  js  c++  java
  • 通过TopShelf简单创建windows service

    目前很多项目都是B/S架构的,我们经常会用到webapi、MVC等框架,实际项目中可能不仅仅是一些数据的增删改查,需要对数据进行计算,但是将计算逻辑放到api层又会拖累整个项目的运行速度,从而会写一些计划任务(使用quartz.net,在上一篇中已经提到)将需要计算的数据提前计算并入库,理论上api层需要做的只是增删改查,从而加快程序运行速度。

            传统windows 服务需要创建一个windows service 项目,我自己没有用过,但是看过别人的整个开发流程,感觉及其繁杂并且不容易调试。

            使用topshelf可以很快的创建一个服务,而我们需要做的只是创建一个控制台程序,调试成本也大大降低。

            步骤如下:

    1. 首先还是通过nuget添加topshelf程序集
    2. 添加ServiceRunner类,这里用Quartz做例子。当然不仅仅适用于次,也可以用于wcf等。

      using Quartz;
      using Quartz.Impl;
      using Topshelf;
      
      namespace KfqPointService
      {
          public sealed class ServiceRunner : ServiceControl, ServiceSuspend
          {
              private readonly IScheduler scheduler;
      
              public ServiceRunner()
              {
                  scheduler = StdSchedulerFactory.GetDefaultScheduler();
              }
      
              public bool Start(HostControl hostControl)
              {
                  scheduler.Start();
                  return true;
              }
      
              public bool Stop(HostControl hostControl)
              {
                  scheduler.Shutdown(false);
                  return true;
              }
      
              public bool Continue(HostControl hostControl)
              {
                  scheduler.ResumeAll();
                  return true;
              }
      
              public bool Pause(HostControl hostControl)
              {
                  scheduler.PauseAll();
                  return true;
              }
          }
      }
      
      

       

    3. 在程序入口中添加代码

      using System.Configuration;
      using KfqPointService;
      using Topshelf;
      
      namespace LfsZqHbInterface
      {
          class Program
          {
              static void Main(string[] args)
              {
                  //LogWriter.Debug("Begin Service");
                  HostFactory.Run(x =>
                  {
                      x.Service<ServiceRunner>();
                      x.SetDescription(ConfigurationManager.AppSettings["Description"]);
                      x.SetDisplayName(ConfigurationManager.AppSettings["DisplayName"]);
                      x.SetServiceName(ConfigurationManager.AppSettings["ServiceName"]);
                      x.EnablePauseAndContinue();
                  });
              }
          }
      }
      
      
    4. 将Windows服务安装到服务器上

            (1)依次打开服务文件夹以管理员权限运行powershell,并进入服务所在文件夹。

            

            (2)输入.文件名.exe install 回车安装此服务,如下图所示

            

            出现此场景为安装成功,此时大功告成,打开服务面板就可看到我们刚刚安装的服务。

  • 相关阅读:
    markdown的学习
    python面向对象-我的理解
    SQL的学习
    Mycil命令行MySQL语法高亮和自动补全工具
    命令行启动MySQL
    JavaWeb项目(SSM)准备工作
    Java一些七七八八的配置
    Win10-64位 免安装版Mysql8下载安装运行
    为什么要进行URL编码
    JavaWeb项目中文乱码问题
  • 原文地址:https://www.cnblogs.com/panxixi/p/11798241.html
Copyright © 2011-2022 走看看