Я бы предложил посмотреть на равноправный канал WCF (System.Net.PeerToPeer), чтобы каждый узел знал о других узлах. Вот ссылка , которая предлагает достойное представление.
Что касается определения, какой узел должен быть ведущим, то хитрость будет заключаться в том, чтобы договориться о том, какой узел должен быть ведущим, если два или более узлов подключаются к сети одновременно в одно и то же время. Как только узлы узнают друг о друге, должен быть какой-то детерминированный механизм для установления мастера. Например, вы можете использовать самое раннее время создания, наименьшее значение последнего октета IP-адреса каждого узла или что-либо еще. Вам просто нужно определить схему, которая позволяет узлам согласовывать это автоматически.
Наконец, что касается проверки, если мастер еще жив, я бы предложил использовать основанный на событиях механизм, описанный здесь . Мастер может отправлять периодические события состояния и состояния, для которых будут регистрироваться другие узлы. Я бы поставил блок try / catch / finally в точке ввода кода, чтобы в случае сбоя мастера он мог опубликовать одно финальное событие MasterClosing, чтобы подчиненные знали, что он уходит. Это не учитывает сбой системы, например, сбой питания и т. Д. Чтобы справиться с этим, укажите время ожидания в ведомых устройствах, чтобы по истечении времени ожидания ведомые устройства могли запросить мастер-устройство, чтобы узнать, все ли оно еще там. Если нет, ведомые могут договариваться между собой, используя ваш детерминистический алгоритм о том, кто должен быть следующим хозяином.