c# - Biblioteca portátil de clases.NET y soporte UDP
networking philips-hue (2)
Como se describe en este artículo de MSDN , los PCL se limitan a ensamblados comunes para las plataformas de destino:
En un proyecto de Portable Class Library, usted especifica las plataformas a las que desea dirigirse y solo se hace referencia en su proyecto a los ensamblados compatibles para esas plataformas. Si intenta hacer referencia a un conjunto que no es compatible con las plataformas a las que ha apuntado, Visual Studio le advierte de la incompatibilidad. Los ensamblados principales (mscorlib.dll, System.dll, System.Core.dll y System.Xml.dll) son compatibles con todas las plataformas.
Como se indica en la tabla de resumen del mismo artículo, la biblioteca de clases de red (NCL) es compatible con todas las plataformas, pero XBox 360. Lecturas adicionales llevan a la siguiente información:
Cuando especifica las plataformas a las que desea apuntar en un proyecto de Portable Class Library, los ensamblados compatibles para esas plataformas se referencian automáticamente en su proyecto. No es necesario agregar o quitar ensamblajes. Los ensamblajes a los que se hace referencia se actualizan automáticamente si cambia las plataformas de destino.
Entonces, probablemente, seleccionó todas las plataformas durante la creación del proyecto. Deshabilitar XBox 360 debería devolverle el soporte para NCL y UdpClient. Sin embargo, si necesita soporte también para Xbox 360, tiene dos opciones: elegir un tipo de proyecto que no sea PCL o implementar manualmente el soporte UDP.
Estoy escribiendo una biblioteca de C # para Philips Hue Lights. Estoy tratando de escribir los envoltorios de API base en el conjunto portátil .NET de esa manera puedo reutilizar esta biblioteca para varias plataformas como Windows 8 / RT / WP. La API en sí misma está en todo HTTP usando REST, por lo que HttpWebRequest
servirá la mayoría de mis necesidades.
El puente de red que controla las luces se puede descubrir usando SSDP sobre UDP. Sin embargo, no puedo encontrar una manera de usar sockets UDP en la biblioteca de clases portátil (PCL).
No hay System.Net.Sockets
disponibles. No hay nada en el espacio de nombres de System.Net
que lo permita tampoco. He visto un DatagramSocket
listado en Windows.Networking.Sockets
pero no puedo ver ese espacio de nombres en Intellisense.
¿Alguien tiene alguna idea de cómo podría obtener la funcionalidad UDP para SSDP bajo .NET PCL?
Realmente no quiero tener que separar la funcionalidad de descubrimiento de la biblioteca central.
Ahora mismo estoy apuntando a .NET 4.5 + SL 5 + WP 8 + .NET for Windows Store
. Tenía la impresión de que Sockets todavía estaban disponibles.
No existe una intersección común para el soporte de socket entre las aplicaciones WinRT y WPF, por lo que no está disponible en proyectos PCL dirigidos a ellas.
Tengo una biblioteca PCL orientada a WPF y WinRT que interactúa con una red de descubrimiento UDP, y la implementación más limpia que se me ocurrió involucró la creación de una interfaz IUDPSocket en la biblioteca PCL que define a los miembros para enviar / recibir datos y conectarse a grupos de multidifusión. La aplicación WPF implementa mi IUDPSocket usando un System.Net.Sockets.Socket, y la aplicación RT implementa esto usando un Windows.Networking.Sockets.DatagramSocket.
El constructor de mi clase de cliente de red de descubrimiento (definido en el proyecto PCL) toma un delegado que se utiliza para crear una instancia de IUDPSocket. Hago esto en lugar de pasar una instancia de IUDPSocket inicializada para que el código de llamada no tenga que saber qué puerto (s) o dirección (es) están involucrados.