Поддержка многоадресной рассылки в .Net - PullRequest
7 голосов
/ 05 февраля 2009

Чтобы реализовать сетевое приложение, которое использует многоадресную рассылку для отправки небольших периодических сообщений другим процессам в сети, какие у меня есть варианты в отношении использования API в .Net Framework? Помимо моего очевидного текущего выбора, API-интерфейса System.net.sockets, предоставляет ли WCF более простой подход? Или WCF является исключительно механизмом IPC на основе SOA «точка-точка»?

Примечание : я хорошо знаком с деталями реализации многоадресного программирования. Что меня интересует, так это то, что предлагает .Net Framework.

Ответы [ 4 ]

2 голосов
/ 05 февраля 2009

Я собирался предложить использовать каналы обратного вызова (то есть систему паб / подтип), реализованные в WCF, но это потребовало бы от ваших клиентов регистрации на «сервере».

Затем я собирался упомянуть решения для обмена сообщениями корпоративного класса, такие как Tibco EMS (реализация JMS).

Затем я нажал на Google и нашел эту ссылку: WCF Multicasting . Там есть много идей, с которыми я еще не сталкивался в своем первоначальном взгляде на WCF.

2 голосов
/ 05 февраля 2009

Вы просто создаете UDPClient и отправляете данные на адрес многоадресной рассылки (224/4, то есть любой адрес от 224.0.0.0 до 239.255.255.255).

Ваши клиенты просто слушают по этому адресу, как обычно.

См. Мой ответ здесь для получения более подробной информации.

P.S. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - 1013 * - это излишнее излишнее решение для такой простой задачи, но вполне возможно с WCF. Там разные Message Exchange Patterns там, я. е. пути общения.

Что вам нужно, это IOutputChannel для отправителя и IInputChannel для слушателей, это шаблоны, ориентированные на дейтаграммы.

0 голосов
/ 05 января 2010

FWIW, ваш первоначальный вопрос конкретно задавал вопрос, может ли WCF достичь ваших целей. Как Quassnoi указывал ранее, вы можете сделать это с помощью WCF. Хотя большая часть литературы о WCF посвящена тому, как вы используете его контрактную модель, возможно и вероятно просто использовать модель канала и структуру привязки.

Если вы реализуете IOutputChannel и IInputChannel, вы можете создать свой собственный канал на основе дейтаграмм. Это предусмотрено как часть структуры нет (и я думаю, что это также является ключевым в вашем вопросе). Однако Microsoft предоставила образец транспорта UDP (который, как они утверждают, поддерживает многоадресную передачу). Вы можете найти их образец по следующему адресу:

http://msdn.microsoft.com/en-us/library/ms751494.aspx

0 голосов
/ 05 февраля 2009

WCF действительно тяжел для того, что вы хотите сделать.

Лучше всего использовать дейтаграммы в сокетах API. Они не слишком страшны, как только вы разберетесь с API, но он, безусловно, не самый дружелюбный из доступных.

Многоадресная рассылка осуществляется по адресу, который отправляется, при условии, что ваш ISP / администратор сети разрешает многоадресную передачу данных. WCF по своей сути не допускает множественные цели AFAIK, когда вы создаете прокси, вы должны указать его на IP (который может быть многоадресным адресом)

...