Я нашел свое решение ...
Предположение, которое я сделал, было проектом службы 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);
}
}
}