我希望能够在Visual Studio中使用我的服务的TopShelf调试功能。
很多examples和documentation指的是在Visual Studio中创建Windows控制台项目第一个,然后然后添加TopShelf ,OWIN等
但是,在我的情况下,我已经拥有了一个非常好且工作正常的Windows服务项目,名为QShipsService.sln等...它使用了一个简单的连接服务(不可否认的是旧的SOAP遗留服务)。
有人可以指导我或提供一个如何使用TopShelf的示例,以及现有的非控制台项目吗?
答案 0 :(得分:1)
我找到了自己的解决方案......
我做的假设是默认的Windows服务项目默认为希望将程序注册为服务,并在服务运行后启动OnOpen()
和OnClose()
方法。
在我的情况下,我想重新使用基于Timer()的现有服务,并且它将每4小时启动一次以调用SOAP调用并返回一些数据。我没有意识到的是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);
}
}
}