Topshelf Configuration z
Topshelf Configuration
While the Quickstart gives you enough to get going, there are many more features available in Topshelf. The following details the configuration options available, and how to use them in Topshelf services.
Service Name
Specify the base name of the service, as it is registered in the services control manager. This setting is optional and by default uses the namespace of the Program.cs file (well, basically, the calling assembly type namespace).
HostFactory.New(x =>
{
x.SetServiceName("MyService");
});
It is recommended that service names not contains spaces or other whitespace characters.
Each service on the system must have a unique name. If you need to run multiple instances of the same service, consider using the InstanceName command-line option when registering the service.
Service Description
Specify the description of the service in the services control manager. This is optional and defaults to the service name.
HostFactory.New(x =>
{
x.SetDescription("My First Topshelf Service");
});
Display Name
Specify the display name of the service in the services control manager. This is optional and defaults to the service name.
HostFactory.New(x =>
{
x.SetDisplayName("MyService");
});
Instance Name
Specify the instance name of the service, which is combined with the base service name and separated by a $. This is optional, and is only added if specified.
HostFactory.New(x =>
{
x.SetInstanceName("MyService");
});
This option is typically set using the command-line argument, but it allowed here for completeness.
Service Configuration
The service can be configured in multiple ways, each with different goals. For services that can handle a dependency on Topshelf, the ServiceControl interface provides a lot of value for implementing the service control methods. Additionally, a zero-dependency solution is also available when lambda methods can be used to call methods in the service class.
Simple Service
To configure a simple service, the easiest configuration method is available.
HostFactory.New(x =>
{
x.Service<MyService>();
}); // Service implements the ServiceControl methods directly and has a default constructor
class MyService : ServiceControl
{}
If the service does not have a default constructor, the constructor can be specified, allowing the service to be created by the application, such as when a container needs to be used.
HostFactory.New(x =>
{
x.Service<MyService>(() => ObjectFactory.GetInstance<MyService>());
}); // Service implements the ServiceControl methods directly and has a default constructor
class MyService : ServiceControl
{
public MyService(SomeDependency dependency)
{}
}
If the service needs access to the HostSettings during construction, they are also available as an overload.
HostFactory.New(x =>
{
x.Service<MyService>(hostSettings => new MyService(hostSettings));
}); // Service implements the ServiceControl methods directly and has a default constructor
class MyService : ServiceControl
{
public MyService(HostSettings settings)
{}
}
Custom Service
To configure a completely custom service, such as one that has no dependencies on Topshelf, the following configuration is available.
HostFactory.New(x =>
{
x.Service<MyService>(sc =>
{
sc.ConstructUsing(() => new MyService()); // the start and stop methods for the service
sc.WhenStarted(s => s.Start());
sc.WhenStopped(s => s.Stop()); // optional pause/continue methods if used
sc.WhenPaused(s => s.Pause());
sc.WhenContinued(s => s.Continue()); // optional, when shutdown is supported
sc.WhenShutdown(s => s.Shutdown());
});
});
Each of the WhenXxx methods can also take an argument of the HostControl interface, which can be used to request the service be stopped, request additional start/stop time, etc.
HostFactory.New(x =>
{
x.Service<MyService>(sc =>
{
sc.WhenStarted((s, hostControl) => s.Start(hostControl));
}
}
The HostControl interface can be retained and used as the service is running to Stop the service.
Service Start Modes
There are multiple service start modes, each of which can be specified by the configuration. This option is only used if the service is being installed.
HostFactory.New(x =>
{
x.StartAutomatically(); // Start the service automatically
x.StartAutomaticallyDelayed(); // Automatic (Delayed) -- only available on .NET 4.0 or later
x.StartManually(); // Start the service manually
x.Disabled(); // install the service as disabled
});
Service Recovery
Topshelf also exposes the options need to configure the service recovery options as well.
HostFactory.New(x =>
{
x.EnableServiceRecovery(r =>
{
//you can have up to three of these
r.RestartComputer(5, "message");
r.RestartService(0);
//the last one will act for all subsequent failures
r.RunProgram(7, "ping google.com"); //should this be true for crashed or non-zero exits
r.OnCrashOnly(); //number of days until the error count resets
r.SetResetPeriod(1);
});
});
Service Identity
Services can be configured to run as a number of different identities, using the configuration option that is most appropriate.
HostFactory.New(x =>
{
x.RunAs("username", "password");
});
Runs the service using the specified username and password. This can also be configured using the command-line.
HostFactory.New(x =>
{
x.RunAsPrompt();
});
When the service is installed, the installer will prompt for the username/password combination used to launch the service.
HostFactory.New(x =>
{
x.RunAsNetworkService();
});
Runs the service using the NETWORK_SERVICE built-in account.
HostFactory.New(x =>
{
x.RunAsLocalSystem();
});
Runs the service using the local system account.
HostFactory.New(x =>
{
x.RunAsLocalService();
});
Runs the service using the local service account.
Custom Install Actions
These settings allow user-specified code to be executed during the service install/uninstall process.
Before Install Actions
Topshelf allows actions to be specified that are executed before the service is installed. Note that this action is only executed if the service is being installed.
HostFactory.New(x =>
{
x.BeforeInstall(() => { ... });
});
After Install Actions
Topshelf allows actions to be specified that are executed after the service is installed. Note that this action is only executed if the service is being installed.
HostFactory.New(x =>
{
x.AfterInstall(() => { ... });
});
Before Uninstall Actions
Topshelf allows actions to be specified that are executed before the service is uninstalled. Note that this action is only executed if the service is being uninstalled.
HostFactory.New(x =>
{
x.BeforeUninstall(() => { ... });
});
After Uninstall Actions
Topshelf allows actions to be specified that are executed after the service is uninstalled. Note that this action is only executed if the service is being uninstalled.
HostFactory.New(x =>
{
x.AfterUninstall(() => { ... });
});
Service Dependencies
Service dependencies can be specified such that the service does not start until the dependent services are started. This is managed by the windows services control manager, and not by Topshelf itself.
HostFactory.New(x =>
{
x.DependsOn("SomeOtherService");
});
There are a number of built-in extension methods for well-known services, including:
HostFactory.New(x =>
{
x.DependsOnMsmq(); // Microsoft Message Queueing
x.DependsOnMsSql(); // Microsoft SQL Server
x.DependsOnEventLog(); // Windows Event Log
x.DependsOnIis(); // Internet Information Server
});
Advanced Settings
EnablePauseAndContinue
Specifies that the service supports pause and continue, allowing the services control manager to pass pause and continue commands to the service.
HostFactory.New(x =>
{
x.EnablePauseAndContinue();
});
EnableShutdown
Specifies that the service supports the shutdown service command, allowing the services control manager to quickly shutdown the service.
HostFactory.New(x =>
{
x.EnableShutdown();
});
Service Recovery
To configure the service recovery options, a configurator is available to specify one or more service recovery actions. The recovery options are only used when installing the service, and are set once the service has been successfully installed.
HostFactory.New(x =>
{
x.EnableServiceRecovery(rc =>
{
rc.RestartService(1); // restart the service after 1 minute
rc.RestartSystem(1, "System is restarting!"); // restart the system after 1 minute
rc.RunProgram(1, "notepad.exe"); // run a program
rc.SetResetPeriod(1); // set the reset interval to one day
})
});
The recovery actions are executed in the order specified, with the next action being executed after the previous action was run and the service failed again. There is a limit (based on the OS) of how many actions can be executed, and is typically 2-3 actions.
Topshelf Configuration z的更多相关文章
- 使用Topshelf创建Windows服务
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- Topshelf创建Windows服务
使用Topshelf创建Windows服务 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps ...
- 【第三方插件】使用Topshelf创建Windows服务
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- 使用Topshelf创建Windows服务[转载]
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- u-boot 之配置分析 (2)
Makefile简要分析所有这些目录的编译连接都是由顶层目录的makefile来确定的. 1.在makefile中有: unconfig: @rm -f $(obj)include/config.h ...
- 移植 MIUI Framework
移植MIUI Framework 原文:http://www.miui.com/thread-409543-1-1.html 1. 为什么使用代码插桩 首先我们来回顾第一章中的Android软件架构图 ...
- TQ210 —— S5PV210 uboot顶层Makefile分析
转自:http://blog.csdn.net/wqx521/article/details/52469759 # (C) Copyright 2000-2008 # Wolfgang Denk, D ...
- JAVA简单上传图片至七牛
utils package com.example.demo.utils; import com.alibaba.fastjson.JSONObject; import com.qiniu.commo ...
- 【Python】使用torrentParser1.03对多文件torrent的分析结果
Your environment has been set up for using Node.js 8.5.0 (x64) and npm. C:\Users\horn1>cd C:\User ...
随机推荐
- php中die(),exit(),return的区别
die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回 ...
- 构建私有Docker Registry
1.设置insecure-registry: 可能会出现无法push镜像到私有仓库的问题. 这是因为我们启动的registry服务不是安全可信赖的. 1) sudo vim /etc/default/ ...
- (转)如何使用Journalctl查看并操作Systemd日志
原文:https://blog.csdn.net/zstack_org/article/details/56274966 内容简介 作为最具吸引力的优势,systemd拥有强大的处理与系统日志记录功能 ...
- C# checked和unchecked运算符
1.作用 checked和unchecked运算符用于CLR(公共语言运行时)强制对它们所作用的代码块,进行(不进行)代码溢出检测 2.示例说明 有代码如下: static void Main(str ...
- VirtualBox 虚拟机磁盘空间不够用,增大空间方法(这里以MAC为例)
开始在Virtualbox 上,安装MAC系统的时候只分配了20G的空间,随着Xcode 开发软件安装的东西多了,比如:IOS 的Simulator 的各种版本,4.3,5.0,6.0 加起来要到少要 ...
- Hadoop科普文—常见的45个问题解答
1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式 全分布式模式 2. 单机(本地)模式中的注意点? 在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个 ...
- viewport其实没那么难理解
在学习移动端布局的时候,你肯定听说过"viewport"这个词,然后去问度娘或谷歌.你会惊奇的发现,这个viewport不简单,居然有那么多兄弟——layout viewport. ...
- 次讲解js中的回收机制是怎么一回事。
在前几天的一篇闭包文章中我们简单的介绍了一下闭包,但是并没有深入的讲解,因为闭包涉及的知识点比较多,为了能够更好的理解闭包,今天讲解一下关于js中的回收机制. 在初识闭包一文中我说过js中有回收机制这 ...
- ASP.NET Visual Studio2010 发布Web网站问题详解
今天研究了一下如何发布web网站,之前总是没耐心,遇到点问题就没心情搞了,今天总算有点耐心搞明白了.其实遇到的问题还是挺多的,网上也没有太全的解释,所以结合自己还有别人的方法进行一下总结. 环境:Wi ...
- 二:Vim常用命令
一般模式下的命令: -- 插入命令 i 光标前插入 I 当前行开始 o 下一行 O 上一行插入新行 a 光标后插入 A 当前行末尾 -- 定位命令 :set nu 显示行号 :set nonu 取消行 ...