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 回车安装此服务,如下图所示

            

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

  • 相关阅读:
    php改写session到数据库
    mysql UNIX时间戳与日期的相互转换
    关于netbeans中的JComboBox(复选框)
    Java中数据类型转换
    趣味游戏___表示数
    C语言 约瑟夫圈问题:N个人围成一圈,从第一个人开始按顺序报数并编号1,2,3,……N,然后开始从第一个人转圈报数,凡是报到3的退出圈子。则剩下的最后一个人编号是多少。
    maven——使用阿里云镜像
    spring——整合Mybatis
    spring——AOP(静态代理、动态代理、AOP)
    spring——通过注解显式的完成自动装配
  • 原文地址:https://www.cnblogs.com/panxixi/p/11798241.html
Copyright © 2011-2022 走看看