.NET可移植类库和UDP支持(.NET Portable Class Library and UD

2019-08-06 12:17发布

我写飞利浦色调灯光一个C#库。 我想这样我可以重新使用这个库的各种平台,如Windows 8 / RT / WP写基本的API包装在.NET便携式集。 API本身是各地使用REST HTTP,这样HttpWebRequest将成为我的大多数需求。

网桥控制自己可以使用SSDP通过UDP发现灯光。 但是,我无法找到一个方法在便携式类库(PCL)使用UDP套接字。

没有System.Net.Sockets可用。 没有什么在System.Net命名空间中,将允许它的。 我见过一个DatagramSocket上市Windows.Networking.Sockets但我无法看到在智能感知该命名空间。

没有人有任何想法我怎么能在.NET PCL得到UDP功能的SSDP?

我真的不希望有这样的发现功能,从核心存储库中。

现在我针对.NET 4.5 + SL 5 + WP 8 + .NET for Windows Store 。 我是接人仍然可用的印象。

Answer 1:

没有对的WinRT和WPF应用程序之间插座支持一个共同的交叉,所以它不是在PCL项目针对他们提供。

我有一个PCL库靶向WPF和WinRT的与一个UDP发现网络交互,和最干净的实施我想出了参与创建在PCL库定义成员用于发送/接收数据并连接到多播组的IUDPSocket接口。 在WPF应用程序使用System.Net.Sockets.Socket实现我的IUDPSocket,这使用Windows.Networking.Sockets.DatagramSocket的RT应用程序实现。

我发现网络客户端类(在PCL项目中定义)的构造函数,用来创建IUDPSocket实例的委托。 我这样做的,而不是通过在初始化IUDPSocket实例,以便调用代码并不需要知道哪些端口或地址(ES)参与。



Answer 2:

作为这种通过描述MSDN文章 ,PCL被限制为目标平台常见组件:

在便携式类库项目,您可以指定要定位的平台,只有这些平台所支持的组件在项目中被引用。 如果您尝试引用不支持您所定位平台的组件时,Visual Studio警告您的不相容性。 核心组件(mscorlib.dll中,System.dll中,System.Core.dll和system.xml.dll的)的所有平台都支持。

正如在同一篇文章的汇总表所述,网络类库(NCL)支持每一个平台,但Xbox 360的进一步阅读导致了以下信息:

当您指定要在便携式类库项目指定的平台,这些平台所支持的组件在你的项目中自动引用。 您不必添加或删除组件。 如果你改变了目标平台的引用程序会自动更新。

所以,很可能,你的项目创建期间选择的每一个平台。 禁用的Xbox 360应该把你回来的NCL和UdpClient支持。 但是,如果你需要的支持也为Xbox 360,你有两种选择:选择项目类型,是不是PCL或手动实现UDP支持。



文章来源: .NET Portable Class Library and UDP support