Во-первых: да, почти всегда предпочтительно, чтобы сервер в Windows был реализован в качестве системной службы. Тем не менее, это дополнительный бонус, если сервер также можно запустить из командной строки для устранения неполадок.
Обычно не так сложно структурировать свой код, чтобы логика, специфичная для службы, абстрагировалась в функции, которые могут проверять, работаете ли вы в качестве службы или в командной строке, и вести себя соответствующим образом. Я предпочитаю иметь один модуль с исходным кодом, содержащий только функцию main () и специфичные для службы вещи. Для достижения наилучших результатов убедитесь, что только этот модуль знает, в каком режиме вы работаете. (Обратите внимание также, что этот модуль часто может наследоваться от одного проекта к другому только с небольшими изменениями.)
Другим преимуществом этого является то, что вы можете выполнять большую часть отладки в режиме командной строки без использования нескольких параметров сборки. Вам все еще нужно будет протестировать (и, возможно, отладить) саму логику сервиса, но это гораздо меньшая работа.
Здесь есть дополнительная информация здесь вы, наверное, уже видели.