Автообнаружение удаленного сервера. Трансляция или нет? - PullRequest
4 голосов
/ 22 августа 2008

У меня есть клиент-серверное приложение, которое взаимодействует с удаленным доступом .Net. Мне нужно, чтобы мои клиенты могли найти сервер (ы) в сети, не требуя настройки на стороне клиента.

Насколько я знаю, поддержка удаленного доступа в удаленном взаимодействии отсутствует. Я готов реализовать решение UDP, где клиенты смогут находить серверы с помощью широковещательных сообщений.

Я хочу услышать коллективную ТАКУЮ мудрость, прежде чем идти вперед. Это лучший способ? Любые другие предложения?

Ответы [ 5 ]

4 голосов
/ 02 октября 2008

Я рассмотрел как SSDP, так и UPnP для этого типа функциональности, но я бы порекомендовал использовать собственное решение UDP multicast . По сути, многоадресная передача очень похожа на широковещательную рассылку, но связываются только с машинами, которые присоединились к многоадресной группе (то есть запрошенной широковещательной рассылки).

ИМХО, SSDP и UPnP, раздутые и чрезмерно сложные для обнаружения ресурсов ... но эй, это стандарт. ;)

1 голос
/ 02 октября 2008

Вы можете также рассмотреть Apple Bonjour , которая является их Zeroconf реализацией. Он доступен для Mac, ПК и Linux / BSD.

1 голос
/ 02 октября 2008

Похоже, вам нужен Простой протокол обнаружения услуг или SSDP. Это реализовано в Windows как часть поддержки Microsoft для Universal Plug and Play . Поскольку это протокол отраслевого стандарта, это хорошая ставка. Например, если вы хотите иметь дело с брандмауэрами или другими проблемами, это будет выяснено другими, вместо того, чтобы вам приходилось выбирать собственное решение.

Поскольку вы говорите .NET, я предполагаю, что вы работаете в Windows. Существует несколько устаревший документ (2001), описывающий API в стиле C и COM API для Windows, озаглавленный Поддержка клиентов с поддержкой технологии Plug and Play (UPnP) . API-интерфейсы COM предоставляются UPNP.DLL, а API-интерфейсы в стиле C для SSDP - SSDPAPI.DLL.

API в стиле COM для UPNP , вероятно, является лучшим выбором. Поскольку C # может обернуть COM-объекты для вас и обрабатывать взаимодействие. Я не смог найти места, где этот API был портирован на C # или .NET Framework изначально.

0 голосов
/ 25 марта 2009

Мое многоадресное UDP-решение кажется ненадежным из-за недавнего обновления MS.

0 голосов
/ 22 августа 2008

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

...