2008-09-30 10 views
2

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

ответ

2

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

1

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

1

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

+0

Я бы рекомендовал создать специальную учетную запись для каждой записи, которую вы пишете, предоставляя ей только необходимые разрешения, а не защелкиваясь на доступной учетной записи, поскольку это потенциальное отверстие безопасности. – 2008-09-30 21:31:30

1

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

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

1

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

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

installutil MyApp.exe 

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

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

0

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

0

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

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

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

1

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

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