Topshelf开源跨平台宿主服务框架

介绍:

Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。

官网:http://topshelf-project.com
GitHub:http://github.com/topshelf/Topshelf

项目测试:

创建项目

  1. 新建一个控制台程序

  2. 添加引用
    通过nuget包管理器搜索TopShelf,安装:

    1.jpg

  3. 创建服务
    先创建一个类如MyService,继承ServiceControl,然后实现:
    可以看到Start方法和Stop方法。

    2.jpg

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

namespace app1
{
   public class MyService:ServiceControl
    {
        public bool Start(HostControl hostControl)
        {
            throw new NotImplementedException();
        }

        public bool Stop(HostControl hostControl)
        {
            throw new NotImplementedException();
        }
    }
}

在方法中实现要在服务程序中实现的功能代码。

3.jpg

using System;
using System.Timers;
using Topshelf;

namespace app1
{
   public class MyService:ServiceControl
    {
       readonly Timer _timer;
       public MyService()
       {
           _timer = new Timer(1000) { AutoReset = true };
           _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is time of {0}.", DateTime.Now);
           
       }
       
        public bool Start(HostControl hostControl)
        {
            _timer.Start();
            return true;
        }

        public bool Stop(HostControl hostControl)
        {
            _timer.Stop();
            return true;
        }
    }
}
  1. 调用
    在Main中调用
    5.jpg
using Topshelf;

namespace app1
{
    class Program
    {
        static void Main(string[] args)
        {
            HostFactory.Run(x =>
            {
                x.Service();

                //以local system模式运行
                x.RunAsLocalSystem();

                /*
                //启动类型设置
                x.StartAutomatically();//自动
                x.StartAutomaticallyDelayed();// 自动(延迟启动)
                x.StartManually();//手动
                x.Disabled();//禁用
                */
                //常规信息
                x.SetDescription("服务的描述信息"); //MyService服务的描述信息
                x.SetDisplayName("服务的显示名称"); //MyService服务的显示名称
                x.SetServiceName("服务名称"); //MyService服务名称

            });
        }
    }
}

  1. 服务设置完成后,可以直接双击以控制台的形式运行。

    6.jpg

  2. 安装服务
    安装:程序文件名.exe install
    启动:程序文件名.exe start
    停止:程序文件名.exe stop
    卸载:程序文件名.exe uninstall

    更多命令:程序文件名.exe help

跨平台(未验证)

Topshelf是一个开源的跨平台的宿主服务框架,不过本身只支持mono 命令行执行,不能使用Topshelf的命令行Start,Stop控制服务。

将程序上传到linux 系统执行。 执行:

mono 程序文件名.exe

注意:topshelf 对linux的支持需要加一个扩展包https://www.nuget.org/packages/Topshelf.Linux/,然后Mono 最好用最新的4.2 版本。

4.jpg

你可能感兴趣的:(Topshelf开源跨平台宿主服务框架)