2009-04-12 1 views
1

Folks,Длинных бегущих службы Windows

Я хочу разработать сервис Windows долго работает (она должна работать без проблем в течение нескольких месяцев), и я удивляюсь, что это лучший вариант здесь:

  1. Использования (true) в методе OnStop
  2. Использовать таймер для галочки каждые n секунд и запускать мой код
  3. Любые другие варианты?

Благодаря Essam

ответ

6

Я бы не сделать # 1.

Я бы либо сделал # 2, либо я бы выделил отдельный поток во время OnStart, который выполняет фактическую работу.

4

Возможно, стоит рассмотреть запланированную задачу с коротким интервалом. Экономит на написании большого количества сантехнического кода и имеет дело с особенностями Windows Services timers.

6

Что угодно, но # 1
Менеджером услуг (или пользователю, если он один активируя управления) ожидает OnStart() и OnStop() вернуться своевременно.
Как обычно это делается, чтобы начать свой собственный поток, который держит все в порядке и, конечно же, слушает событие, которое может остановить его.

+0

+1 для отдельной нитки - это путь! –

1

Я бы не рекомендовал # 1.

То, что я делал в прошлом для одного и того же сценария/ситуации, - это создать запланированную задачу, которая выполняется за считанные секунды, запускает небольшой скрипт, который просто выполняет эти две вещи: # 1 проверяет флаг «IsAlreadyRunning» (который считывается из базы данных) # 2 Если флаг имеет значение true, тогда скрипт немедленно останавливает конечные выходы. Если флаг имеет значение false, скрипт запускает отдельный процесс (exe) в новом потоке (который использует службу для выполнения задачи, которая может быть очень короткой или иногда очень длинной, в зависимости от количества обрабатываемых записей). Этот процесс, конечно, устанавливает и сбрасывает флаг IsAlreadyRunning, чтобы гарантировать, что потоки не начнут выполнять действия, которые перекрываются. У меня есть служба, которая работает уже много лет с этим подходом, и у меня никогда не было никаких проблем с этим. В моем основном процессе используется веб-сервис и множество других вещей для выполнения некоторых тяжелых операций резервного копирования.

0

ли это делать вымыться задачу

1 или

2 просыпаться и смотреть, чтобы увидеть, если потребности выполнить задачу

Если это что-то вроде # 2, затем с помощью MSMQ будет более уместным. С задачей MSMQ можно было бы сделать почти сразу.

2

Не связывайтесь с кодом сервисного контроллера. Если служба хочет остановиться, вы только усугубите ситуацию, используя # 1. И BTW сервис всегда может авария, и в этом случае ваше время (правда) вам ничего не поможет.

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