Обертывание сервиса C# в консольном приложении для отладки его

Я хочу отладить сервис, записанный в C#, и старомодный путь является просто слишком длинным. Я должен остановить сервис, запустить мое приложение, которое использует сервис в режиме отладки (Visual Studio 2008), запустите сервис, присоедините к сервису, обрабатывают и затем перешли у моего Asp. Сетевое приложение для инициирования сервиса.

У меня в основном есть сервис, работающий в фоновом режиме, ожидая задачи. Веб-приложение инициирует задачу, которая будет взята сервисом.

То, что я хотел бы сделать, должно иметь консольное приложение, которое запускает сервис в усилие для меня отладить. Есть ли какая-либо простая демонстрация, о которой кто-либо знает?

28
задан GEOCHET 3 July 2018 в 18:51
поделиться

6 ответов

Вы можете сделать что-то вроде этого в основной точке входа:

static void Main()
{
#if DEBUG
    Service1 s = new Service1();
    s.Init(); // Init() is pretty much any code you would have in OnStart().
#else
    ServiceBase[] ServicesToRun;
    ServicesToRun=new ServiceBase[] 
    { 
        new Service1() 
    };
    ServiceBase.Run(ServicesToRun);
#endif
}

и в обработчике событий OnStart:

protected override void OnStart(string[] args)
{
    Init();
}
23
ответ дан 28 November 2019 в 02:47
поделиться

Подход, который я всегда использую, заключается в том, чтобы изолировать всю логику вашего приложения в библиотеках классов. Это делает ваш сервисный проект действительно просто оболочкой, в которой ваши библиотеки классов размещаются как сервис.

Делая это, вы можете легко тестировать и отлаживать свой код без необходимости иметь дело с головной болью отладки службы путем присоединения к процессу. Я бы порекомендовал, конечно, модульное тестирование, но если вы этого не делаете, то лучшим вариантом будет добавление консольного приложения, которое вызывает ту же точку входа, что и ваша служба.

16
ответ дан 28 November 2019 в 02:47
поделиться

Вот запись в блоге о запуске службы Windows в качестве консольного приложения.

Вы также можете просто создать новое консольное приложение, которое ссылается на ту же логику, что и ваша служба, для методов тестирования или настроить модульные тесты для логики ваших служб

1
ответ дан 28 November 2019 в 02:47
поделиться

В прошлом я использовал модульные тесты для отладки сложных настроек, просто напишите модульный тест, который вызывает любой метод службы с любыми параметрами и устанавливает точки останова отладки в модульном тесте.

Использование testdriven.net или тестраннера jetbrains делает это проще.

1
ответ дан 28 November 2019 в 02:47
поделиться

Возможно, вам захочется проверить TopShelf в своих приключениях.

http://codebetter.com/blogs/dru.sellers/archive/2009/01/11/topshelf.aspx

http://code.google.com/p/topshelf/

5
ответ дан 28 November 2019 в 02:47
поделиться

Для отладочных сборок я обычно использую либо настройку конфига, либо директиву:

 #if DEBUG
    Debugger.Break();
 #endif

или

if(Settings.DebugBreak)
            Debugger.Break();

Я помещаю это в метод OnStart компонента службы. Тогда вы получаете автоматический запрос и подключаетесь к процессу.

2
ответ дан 28 November 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: