Мы регулярно используем службы Windows в качестве фоновых процессов. Мне не нравятся приложения командной строки, так как для их запуска необходимо войти на сервер. Службы работают в фоновом режиме все время (при условии, что они запускаются автоматически). Они также тривиальны для установки с помощью инструмента командной строки sc.exe, который находится в Windows. Мне нравится это лучше, чем bloat -ware, который является installutil.exe. Конечно, installutil делает больше, но мне не нужно то, что он делает. Я просто хочу зарегистрировать свой сервис.
Мы также создали инфраструктуру, в которой у нас есть общая служба .exe, которая загружает файлы .DLL на основе определения интерфейса, поэтому добавить новую «службу» так же просто, как добавить новую DLL и перезапустить хост службы.
Однако мы начали отходить от услуг. Проблема, с которой мы сталкиваемся, заключается в том, что они блокируют библиотеки DLL (по понятным причинам), поэтому их сложно обновлять. Нам нужно остановить, обновить и перезапустить. Не сложно, но дополнительные шаги. Вместо этого мы переходим на специальные «страницы» в наших приложениях asp.net, которые выполняют фактические фоновые задания, которые нам нужны. Есть еще сервис, но все, что он делает, это вызывает страницы asp.net, поэтому он не блокирует ни одну из наших DLL. Затем мы можем заменить библиотеки DLL в каталоге bin asp.net и обычные правила asp.net для запуска перезапуска домена приложения.