美文网首页C#Asp.net开发.NET
Topshelf 秒建 Windows 服务

Topshelf 秒建 Windows 服务

作者: BeckJin | 来源:发表于2018-04-08 22:34 被阅读120次

    Topshelf 是一个用来部署 基于.NET Framework 开发的服务 的框架。它极大的简化服务创建与部署过程,它支持将控制台应用程序部署为服务。开发过 Windows 服务程序的同学应该都比较清楚,代码调试和服务部署上相对来说都过于麻烦,当我第一次接触 Topshelf 的时候,发现它是如此简单,瞬间对之前写的 Windows 服务程序表示深深的叹息 ......

    for what?

    Topshelf 安装

    通过 Nuget 安装 Topshelf 包。

    Install-Package Topshelf
    

    Topshelf 配置

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

    class Program
    {
        static void Main(string[] args)
        {
            // 配置和运行宿主服务
            HostFactory.Run(x => 
            {
                // 指定服务类型。这里设置为 CacheService
                x.Service<CacheService>(s =>
                {
                    // 通过 new CacheService() 构建一个服务实例 
                    s.ConstructUsing(name => 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(); }
    }
    

    安装服务

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

    xxx.exe install
    
    服务安装

    启动服务

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

    服务信息

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

    // 服务显示名称
    //x.SetDisplayName("CacheService");
    // 服务名称
    //x.SetServiceName("CacheService");
    
    xxx.exe install -servicename cacheService
    xxx.exe install -servicename cacheService1
    
    多个相同服务

    服务卸载

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


    卸载 指定服务名称卸载

    参考链接:

    相关文章

      网友评论

        本文标题:Topshelf 秒建 Windows 服务

        本文链接:https://www.haomeiwen.com/subject/xkgmhftx.html