如何将 topshelf 集成到现有的 windows 服务项目中?
How to integrate topshelf to an existing windows service project?
我希望能够在 Visual Studio 中使用我的服务的 TopShelf 调试功能。
很多 examples and documentation 提到在 Visual Studio first 和 [=20= 中创建一个 Windows 控制台项目]然后 添加 TopShelf、OWIN 等
然而,在我的例子中,我已经有一个非常好的和工作的 Windows 服务项目,叫做 QShipsService.sln,等等......它使用一个简单的连接服务(无可否认,旧的 SOAP 遗留服务).
有人可以指导我或提供如何使用 TopShelf 的示例,以及现有的 非控制台 之类的项目吗?
我找到了自己的解决方案...
我所做的假设是默认 Windows 服务项目默认要将程序注册为服务并启动 OnOpen()
和 OnClose()
方法,一旦服务是运行.
在我的例子中,我想重新使用基于 Timer() 的现有服务,它每 4 小时启动一次以调用 SOAP 调用和 return 一些数据。我没有意识到的是 ServiceConfigurator
试图调用它自己的 Open()
和 Close()
方法。
所以我注释掉了 OnOpen
和 OnClose
方法,并允许配置器通过 Open()
方法调用我的工作进程,这就是我本来要做的第一次!
对于像我这样的菜鸟,这里是代码...
//using System.ServiceProcess;
using Topshelf;
namespace QShipsService
{
static class Program
{
static void Main(string[] args)
{
HostFactory.Run(
configure =>
{
configure.Service<QShipsService.QshipsService>(
service =>
{
service.ConstructUsing(s => new QShipsService.QshipsService());
service.WhenStarted(s => s.QStart());
service.WhenStopped(s => s.QStop());
});
//Setup Account that window service use to run.
configure.RunAsLocalSystem();
//add details and names about the service
configure.SetServiceName("QshipsService");
configure.SetDisplayName("QshipsService");
configure.SetDescription("QshipsService Windows Service to extract data from the QSHIPS SOAP service. Data is recorded and maintained inside the SPOT's database in POT-DB.");
});
//## USE THIS IF WE'RE NOT USING TOPSHELF !! ##
// //this loads and starts the QshipsService (see QshipsService.cs program)
// ServiceBase[] ServicesToRun;
// ServicesToRun = new ServiceBase[]
// {
// new QShipsService.QshipsService()
// };
// ServiceBase.Run(ServicesToRun);
}
}
}
我希望能够在 Visual Studio 中使用我的服务的 TopShelf 调试功能。
很多 examples and documentation 提到在 Visual Studio first 和 [=20= 中创建一个 Windows 控制台项目]然后 添加 TopShelf、OWIN 等
然而,在我的例子中,我已经有一个非常好的和工作的 Windows 服务项目,叫做 QShipsService.sln,等等......它使用一个简单的连接服务(无可否认,旧的 SOAP 遗留服务).
有人可以指导我或提供如何使用 TopShelf 的示例,以及现有的 非控制台 之类的项目吗?
我找到了自己的解决方案...
我所做的假设是默认 Windows 服务项目默认要将程序注册为服务并启动 OnOpen()
和 OnClose()
方法,一旦服务是运行.
在我的例子中,我想重新使用基于 Timer() 的现有服务,它每 4 小时启动一次以调用 SOAP 调用和 return 一些数据。我没有意识到的是 ServiceConfigurator
试图调用它自己的 Open()
和 Close()
方法。
所以我注释掉了 OnOpen
和 OnClose
方法,并允许配置器通过 Open()
方法调用我的工作进程,这就是我本来要做的第一次!
对于像我这样的菜鸟,这里是代码...
//using System.ServiceProcess;
using Topshelf;
namespace QShipsService
{
static class Program
{
static void Main(string[] args)
{
HostFactory.Run(
configure =>
{
configure.Service<QShipsService.QshipsService>(
service =>
{
service.ConstructUsing(s => new QShipsService.QshipsService());
service.WhenStarted(s => s.QStart());
service.WhenStopped(s => s.QStop());
});
//Setup Account that window service use to run.
configure.RunAsLocalSystem();
//add details and names about the service
configure.SetServiceName("QshipsService");
configure.SetDisplayName("QshipsService");
configure.SetDescription("QshipsService Windows Service to extract data from the QSHIPS SOAP service. Data is recorded and maintained inside the SPOT's database in POT-DB.");
});
//## USE THIS IF WE'RE NOT USING TOPSHELF !! ##
// //this loads and starts the QshipsService (see QshipsService.cs program)
// ServiceBase[] ServicesToRun;
// ServicesToRun = new ServiceBase[]
// {
// new QShipsService.QshipsService()
// };
// ServiceBase.Run(ServicesToRun);
}
}
}