Лучшая методология разработки приложений для длительно работающих процессоров на c #

StackOverflow https://stackoverflow.com/questions/155116

Вопрос

У меня есть несколько разных рабочих приложений на c #, которые выполняют различные непрерывные задачи:отправка электронных писем из очереди, импорт новых заказов из базы данных веб-сайта в базу данных заказов, создание резервных копий и восстановление базы данных, запуск обработки данных для OLTP -> OLAP и другие связанные задачи.Раньше я выпускал их как службы Windows, но в настоящее время я выпускаю их как обычные консольные приложения.Все они основаны на общей платформе выполнения задач, которую я создал, и я доволен этим, однако я не уверен, каков наилучший способ развертывания приложений такого типа.Мне нравится консольная версия, потому что она быстрая и простая, и в ней можно быстро просмотреть активность программы и выходные данные.Недостатком является то, что на рабочем компьютере запущено несколько экранов консоли, и это приводит к беспорядку.С другой стороны, развертывание метода service, похоже, занимает много времени, и мне приходится просматривать журналы событий, чтобы увидеть сообщения.Каковы некоторые впечатления / комментарии по этому поводу?

Это было полезно?

Решение

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

Другие советы

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

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

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

Служба зарегистрировала свой собственный регистратор данных (запись в базу данных), и во время выполнения пользователь мог запустить графический интерфейс, который подключался к службе с помощью удаленного взаимодействия, чтобы стать живым слушателем!

Я собираюсь проголосовать за службы Windows.Управлять этими консольными приложениями будет настоящей мукой.

Развертывание службы Windows несложно:после первоначальной установки вы просто отключаете их и выполняете XCOPY.Нет необходимости запускать какие-либо сложные установщики.В первый раз это всего лишь полусложно, и даже тогда это просто

installutil MyApp.exe

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

Используйте комбинацию журналов событий (с ошибками, предупреждениями и информацией) для важных уведомлений и просто записывайте подробные журналы в текстовый файл.

Почему бы не получить лучшее из всех миров и не использовать что-то вроде:
http://topshelf-project.com/

Это позволит вам запустить вашу программу из командной строки или из службы Windows.

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

Мы регулярно используем службы Windows в качестве фоновых процессов.Мне не нравятся приложения командной строки, так как для их запуска вам нужно авторизоваться на сервере.Службы постоянно работают в фоновом режиме (при условии, что они запускаются автоматически).Их также легко установить с помощью инструмента командной строки sc.exe, который есть в Windows.Мне это нравится больше, чем навороченная посуда, которая есть installutil.exe.Конечно, installutil делает больше, но мне не нужно то, что он делает.Я просто хочу зарегистрировать свой сервис.

Мы также создали инфраструктуру, в которой у нас есть общий файл service .exe, который загружает файлы DLL на основе определения интерфейса, поэтому добавить новый "сервис" так же просто, как установить новую библиотеку DLL и перезапустить узел сервиса.

Однако мы начали отходить от сервисов.Проблема, с которой мы сталкиваемся, заключается в том, что они блокируют библиотеки DLL (по очевидным причинам), поэтому обновлять их довольно сложно.Нам нужно остановиться, обновить, а затем перезапустить.Не сложные, но дополнительные шаги.Вместо этого мы переходим на специальные "страницы" в наших приложениях asp.net, которые запускают фактические фоновые задания, которые нам нужны.Сервис все еще существует, но все, что он делает, это вызывает страницы asp.net, поэтому он не блокирует ни одну из наших библиотек DLL.Затем мы можем заменить библиотеки DLL в каталоге asp.net bin и включатся обычные asp.net правила для перезапуска домена приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top