.net networking remoting udp broadcast

.net - Remoting autodetección del servidor. Transmitir o no?



udp c# (5)

Tengo una aplicación de cliente / servidor que se comunica con .Net remoto. Necesito que mis clientes puedan encontrar los servidores en la red sin requerir la configuración del lado del cliente.

Hasta donde yo sé, no hay soporte para el descubrimiento en remoto. Estoy preparado para implementar una solución UDP donde los clientes podrán encontrar los servidores a través de mensajes de difusión.

Quiero escuchar la sabiduría SO colectiva antes de seguir adelante. Es esta la mejor manera? ¿Cualquier otra sugerencia?


La mejor solución que he encontrado en mi trabajo remoto fue mantener la lista de servidores en un archivo de configuración en los sistemas cliente y hacerla actualizable. No es el más fácil de mantener pero fue rápido y no se emitió.


Parece que lo que necesita es el protocolo simple de detección de servicios o SSDP. Esto se implementa en Windows como parte del soporte de Microsoft para Universal Plug and Play . Dado que este es un protocolo estándar de la industria, parece una buena apuesta. Por ejemplo, si desea tratar con firewalls u otros problemas, esto habrá sido resuelto por otros en lugar de tener que implementar su propia solución.

Como estás hablando de .NET, asumiré que estás en Windows. Existe un documento un tanto antiguo (2001) que describe una API de estilo C y una API COM para Windows titulada Compatibilidad con el cliente de Universal Plug and Play (UPnP) . Las API COM están expuestas por UPNP.DLL y las API de estilo C para SSDP están expuestas por SSDPAPI.DLL.

Las API de estilo COM para UPNP son probablemente su mejor opción. Como C # puede envolver objetos COM para usted y manejar la interoperabilidad. No pude encontrar ningún lugar donde esta API se haya portado a C # o al .NET Framework de forma nativa.


He visto tanto SSDP como UPnP para este tipo de funcionalidad, pero recomiendo ir con una solución de multidifusión UDP personalizada. Básicamente, la multidifusión es muy similar a una transmisión, pero solo se contactan las máquinas que se han unido al grupo de multidifusión (es decir, han solicitado la transmisión).

En mi humilde opinión, SSDP y UPnP e hinchado y demasiado complicado para el descubrimiento de recursos ... pero bueno, es un estándar. ;)


También podría considerar el Bonjour de Apple, que es su implementación Zeroconf . Está disponible para Mac, PC y Linux / BSD.


Mi solución UDP de multidifusión parece no ser confiable debido a la reciente actualización de MS.