запланированное задание или служба windows - PullRequest
8 голосов
/ 11 мая 2010

Мне нужно создать приложение, которое будет считывать некоторую информацию из базы данных, обрабатывать данные, записывать изменения обратно в базу данных, а затем отправлять электронное письмо с этими изменениями некоторым пользователям или группам.Я буду писать это на C #, и этот процесс должен выполняться один раз в неделю в определенное время.Это будет работать на Windows 2008 Server.

Раньше я всегда шел по пути создания службы Windows с таймером и установки времени / дня ее запуска в app.config.файл, чтобы его можно было изменить и перезапустить, чтобы перехватить обновление.

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

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

Что вы думаете?

Спасибо за любые мысли.

Ответы [ 3 ]

14 голосов
/ 11 мая 2010

Если это приложение раз в неделю, зачем тратить ресурсы на его работу в фоновом режиме до конца недели.

Консольное приложение кажется гораздо более подходящим.

Типичным эмпирическим правилом, которое я использую, является нечто подобное. Сначала я задаю несколько вопросов.

  1. Частота исполнения
  2. Частота изменений # 1
  3. Пусковой механизм

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

6 голосов
/ 11 мая 2010

Основное правило, которому я следую: если вам нужно работать непрерывно, потому что интересующие вас события могут произойти в любое время, используйте службу (или демон в UNIX).

Если вы просто хотите периодически что-то делать, используйте запланированное задание (или cron).

Клинкером здесь является ваша фраза "must be run once a week at a particular time" - перейдите к запланированному заданию.

3 голосов
/ 11 мая 2010

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

...