Как интегрировать верхнюю полку в существующий проект службы Windows? - PullRequest
0 голосов
/ 01 мая 2018

Я хочу использовать возможности отладки TopShelf моего сервиса в Visual Studio.

Множество примеров и документации относятся к созданию проекта консоли Windows в Visual Studio сначала и , затем добавление TopShelf, OWIN и т. д.

Однако в моем случае у меня уже есть отлично работающий проект службы Windows под названием QShipsService.sln и т. Д., И он использует простую подключенную службу (по общему признанию, для старых устаревших служб SOAP).

Может кто-нибудь подсказать мне или привести пример использования TopShelf с существующим неконсольным подобным проектом?

1 Ответ

0 голосов
/ 02 мая 2018

Я нашел свое решение ...

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