2014-10-29 3 views
0

Я создаю службу Windows с использованием кварца. Я хочу развернуть эту службу в 3-х местах, и она должна работать так, как если бы одна служба была выключена, а затем вторая, то следует начать, если вторая неудача, а затем последняя должна начинаться. Все службы указывают на единую базу данных. Могу ли я узнать, как я могу реализовать эти вещи.Управление несколькими службами Windows

@@ Обновленный Вопрос

В том, что все службы делают ту же операцию. У меня есть одна колонка в моей базе данных как nextExecutionTime, если это превышает текущее время, значит, следующая служба начнет выполнение этого задания. Теперь основная проблема, с которой я столкнулся, заключается в том, что все три службы будут запускаться одновременно, поэтому они будут извлекать данные из базы данных и одновременно обновлять их. Поэтому мне нужно уменьшить эту ошибку параллелизма. Могу я узнать решение для этого. Нужно ли мне реализовать какой-то замок или что-то вроде этого?

ответ

0

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

Я создам некоторый главный столбец в некоторой таблице temp. Я запустил любую одну службу и установил его имя (имя_файла или имя места) в качестве мастера вместе с последним временем доступа в этой временной таблице.

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

+0

Вопрос обновлен. –

+0

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

0

Я видел ваш обновленный вопрос. Как я уже сказал в своем ответе, создайте в своей базе таблицу блокировки и создайте имя хранителя (имя службы/имя_компьютера/имя_пользователя) и lastlockaccess timestamp (lastaccesstime этой службой). для любой из услуг и добавьте дополнительный код в каждую службу, которая выполняла следующие задачи:

1> каждый сервис окна подключается к db и считывает запись таблицы блокировки 2> Предположим, что есть 3 службы, а именно A, B, C и вы вводите ловушку в качестве A изначально, что означает, что служба A обращается к db. 3> Когда таблица контроля блокировки B и C будет знать, что A работает с БД, если последнее время доступа к сервису A превышает текущее время с помощью некоторого большого поля, то это означает, что служба A остановлена. Таким образом, программа автоматически вводит новую запись для службы B И C.whichever удерживает блокировку, начнет выполнение.

надеюсь, что это решение поможет вам, однако, в его не идеальном решении.

Смежные вопросы