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的更多相关文章

  1. 使用Topshelf创建Windows服务

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  2. Topshelf创建Windows服务

    使用Topshelf创建Windows服务 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps ...

  3. 【第三方插件】使用Topshelf创建Windows服务

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  4. 使用Topshelf创建Windows服务[转载]

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  5. u-boot 之配置分析 (2)

    Makefile简要分析所有这些目录的编译连接都是由顶层目录的makefile来确定的. 1.在makefile中有: unconfig: @rm -f $(obj)include/config.h ...

  6. 移植 MIUI Framework

    移植MIUI Framework 原文:http://www.miui.com/thread-409543-1-1.html 1. 为什么使用代码插桩 首先我们来回顾第一章中的Android软件架构图 ...

  7. TQ210 —— S5PV210 uboot顶层Makefile分析

    转自:http://blog.csdn.net/wqx521/article/details/52469759 # (C) Copyright 2000-2008 # Wolfgang Denk, D ...

  8. JAVA简单上传图片至七牛

    utils package com.example.demo.utils; import com.alibaba.fastjson.JSONObject; import com.qiniu.commo ...

  9. 【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 ...

随机推荐

  1. init_config_file.lua

    --[[ 读取限流配置 --]] --获取共享内存 local limit_req_store = ngx.shared.limit_req_store --初始化拒绝 URI 列表 reject_u ...

  2. Unity5 2D Animation

    1. 所有的动画保存在 .anim 后缀的文件里.2. Animation 标签用来编辑一堆 Animation clip,每一个clip是一个图片序列,也就是动图.动画的最小控制单位就是clip,一 ...

  3. django 中间件记录所有请求及请求执行时间

    class LoggingMiddleware(object): def process_request(self, request): request.start_time = time.time( ...

  4. ps如何替换有透明图片的颜色

    修改透明图片的颜色 首先用魔棒工具点选颜色区域,然后再在菜单中找到 图像-调整-替换颜色,就可以选任意想要的颜色

  5. 关于require js加载的时候报错的问题

    1.在项目中使用了requery.js  页面总是会出项一些奇怪的错误,如下 后来经过查找资料才发现,原来是因为依赖 的问题,因为require加载的时候是异步加载,而js之间是有相互依赖的,所以解决 ...

  6. Log4J 配置文件模板及代码说明

    相对而言,这个日志系统的配置就没那么随意了,而且有些功能用起来也不是那么爽,譬如动态读取配置文件.不过鉴于使用这个日志的系统还是很多,所以也写一个demo贴出来,风格跟log4j2一样,配置的说明全在 ...

  7. Node.js中http-server的使用

    Node.js中http-server的使用 使用阿里的npm镜像 国外的npm太慢了.查看一下自己使用的源: npm config get registry 应该显示https://registry ...

  8. Java中break、continue及标签等跳转语句的使用[上]

    java 中跳转语句使用break.continue和标签,各自或组合完成相应的功能. 今天做题时遇到关于标签命名规范,顺便将跳转语句语法都看了一遍,很有收获. 在<Java编程思想>一书 ...

  9. linux下logrotate配置和理解---转

    http://os.51cto.com/art/200912/167478_all.htm 对于Linux 的系统安全来说,日志文件是极其重要的工具.系统管理员可以使用logrotate 程序用来管理 ...

  10. Java绘制图片并进行合成

    以下代码可以生成六行两列的图片,代码改成了可以接受参数可循环的. package com.xgt.util; import com.sun.image.codec.jpeg.JPEGCodec; im ...