Лучшая методология для разработки долго работающих процессорных приложений на c # - PullRequest
2 голосов
/ 01 октября 2008

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

Ответы [ 8 ]

2 голосов
/ 01 октября 2008

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

1 голос
/ 03 ноября 2011

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

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

1 голос
/ 01 октября 2008

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

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

installutil MyApp.exe

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

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

1 голос
/ 01 октября 2008

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

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

1 голос
/ 01 октября 2008

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

1 голос
/ 01 октября 2008

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

0 голосов
/ 05 мая 2009

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

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

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

0 голосов
/ 20 февраля 2009

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

...