首页 > 其他 > 详细

Topshelf

时间:2020-06-19 10:58:01      阅读:60      评论:0      收藏:0      [点我收藏+]

一、介绍

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

Topshelf是创建Windows服务的另一种方。它极大的简化服务创建与部署过程,它支持将控制台应用程序部署为服务。

下载

1、官网:http://topshelf-project.com/ 这里面有详细的文档及下载

2、Topshelf的代码托管在 http://github.com/topshelf/Topshelf/

二、使用

1、Topshelf 安装

通过 NuGet 安装 Topshelf 包。

Install-Package Topshelf

技术分享图片

2、Topshelf 配置

以下是我们以 Topshelf 来部署的一个 gRPC 服务代码,Topshelf 关键配置在 Main 方法内,更多的配置建议阅读一下 官方文档,没什么特别复杂的地方,相信大家肯定能看懂。

class Program
{
  static void Main(string[] args)
  {
    // 配置和运行宿主服务
    HostFactory.Run(x => 
    {
      // 指定服务类型。这里设置为 CacheService
      x.Service<CacheService>(s =>
      {
                s.ConstructUsing(name => new CacheService());// 通过 new CacheService() 构建一个服务实例 
                s.WhenStarted(tc => tc.Start());// 当服务启动后执行什么
                s.WhenStopped(tc => tc.Stop());// 当服务停止后执行什么
      });
            
      x.RunAsLocalSystem();// 服务用本地系统账号来运行      
      x.SetDescription("缓存服务");// 服务描述信息      
      x.SetDisplayName("CacheService");// 服务显示名称     
      x.SetServiceName("CacheService"); // 服务名称
    });
  }
}

public class CacheService
{
  private readonly string host = ConfigurationManager.AppSettings["Host"];
  private readonly string port = ConfigurationManager.AppSettings["Port"];

  readonly Server server;
  public CacheService()
  {
    server = new Server
    {
      Services = { MDCache.BindService(new CacheServiceImpl()) },
      Ports = { new ServerPort(host, Convert.ToInt32(port), ServerCredentials.Insecure) }
    };
  }
  public void Start() { server.Start(); }
  public void Stop() { server.ShutdownAsync(); }
}

3、安装服务

通过以上配置,确保程序集 Build 成功后,进入 bin\Debug 目录下,执行 install 命令,一个 Windows 服务就诞生了。(如果出现需要以管理员身份启动的提示,重新以管理员身份启动 cmd )。

xxx.exe install

技术分享图片

4、启动服务

启动:

xxx.exe start

也可以安装成功后我们可以在 Windows 服务下找到并启动它。

技术分享图片

注意:因为 serviceName 必须是唯一的,如果我们希望在同一台机器上运行多个相同的服务,那么我们需要注释掉硬编码设置的 ServiceName 和 DisplayName ,然后通过命令参数来动态指定服务名称。

// 服务显示名称
//x.SetDisplayName("CacheService");
// 服务名称
//x.SetServiceName("CacheService");

xxx.exe install -servicename cacheService
xxx.exe install -servicename cacheService1

技术分享图片

5、服务卸载

卸载和启动的命令保持一致,只需要把 install 改成 uninstall 。

技术分享图片

指定服务名称卸载

技术分享图片

Topshelf

原文:https://www.cnblogs.com/springsnow/p/13161809.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!