Я согласен с Джереми здесь .. То, что вы описываете, не требует сложности контрактов на обратный вызов. Рабочие узлы могут просто предоставить службу WCF (или даже веб-службу WSDL или REST в этом отношении ...), и тогда контроллеру просто нужно будет знать URL каждого из дочерних узлов и отправлять сообщения рабочим узлам.
Если вы хотите, чтобы контроллер мог транслировать одно сообщение и чтобы все рабочие (мне очень не нравилась аналогия главного / подчиненного ... Я давно перешел к тому, чтобы называть это контроллером / рабочим), делают что-то в ответ и опубликовать их прогресс обратно в группу, тогда вы можете использовать часто недооцененный канал P2P, доступный в WCF. Это позволяет группе служб, написанных в WCF, одновременно общаться друг с другом как одноранговые узлы с URL-адресами, которые используются почти как разделители тем / разговоров.
Так, например, вы можете выдавать команды на канале net.p2p: // labs / commands . Только контроллер отправляет команды по этому каналу, но все рабочие узлы слушают. Когда они закончили выполнять свои действия асинхронно, они могут сообщить о прогрессе на канале net.p2p: // labs / status . Дополнительным преимуществом этого подхода является то, что (если вам нужна эта функция) отдельные работники смогут узнать, что делают все остальные работники.
Имейте в виду, однако, что если вы используете P2P, вам придется иметь дело с конфликтом - вы можете получить 2 узла, принимающих одну и ту же команду. Если это нормально, тогда P2P - ваш инструмент. Если вам нужно, чтобы команды передавались и собирались последовательно только отдельными узлами по мере их освобождения (более вероятный сценарий, когда удаленным узлам предписывается запускать отдельные тестовые сценарии и т. Д.), Вы можете использовать привязку MSMQ вместо P2P. Тогда все работники становятся клиентами, которые получают сообщения из очереди, и вам легче будет противодействовать ситуации, когда несколько работников принимают один и тот же запрос.
Для справки:
Сообщение в блоге, которое я недавно написал на равноправном канале .
Сценарии одноранговых каналов в MSDN - Это хорошо, потому что вы можете перейти отсюда к концепциям одноранговых каналов к справочному руководству.
Блог команды Peer Channel