1) Каждая установленная служба Windows регистрируется в базе данных с уникальным идентификатором .
2) Пока ваша служба жива, отправьте сердцебиение. Это сердцебиение может быть простым обновлением поля DateTime, когда служба последний раз регистрировалась. Вы можете обновить поле непосредственно в базе данных или перейти через веб-службу.
3) Создайте таблицу, которая определяет набор задач и назначенный unique_id машины, выполняющей эту задачу. Это может быть первым пришел первым обслужен. Машина может выбрать любую задачу, которую она выберет, и получить исключительные права на эту задачу, зарегистрировавшись в этой таблице. Я предпочитаю этот подход больше, чем централизованное управление, потому что вам не нужно беспокоиться о задачах, которые не выполняются, когда ваш централизованный контроллер выходит из строя.
4) Определите значение времени ожидания для сердцебиения. Каждый из ваших распределенных сервисов будет проверять наличие задач, которые не были подняты или истекли. Поддержание сердцебиения для любой машины, выполняющей задачу, не должно зависеть от того, сколько времени занимает задача. То есть, если задача A занимает 5 минут, machineA все равно должен обновить свое сердцебиение в течение этих 5 минут, чтобы machineB не помечал его как отключившийся.
5) В зависимости от сложности вашей задачи вам может потребоваться столбец состояния, который обновляет работник.