ManagedUPnP:没有版本的发现搜索URI?

时间:2013-02-08 11:47:49

标签: c# .net upnp

对于一个应用程序,我将发现所有运行的“我的”设备及其版本,以推送它们(通过其他协议)。

但我无法弄清楚如何向发现对象指定它必须搜索的URI,而不必指定对象。

注意:我知道我也可以使用空URI字符串发现然后在我收到的设备上进行过滤,但是因为我有一个巨大的(600+)以上的UPnP设备网络,但我需要搜索的少量UPnP设备(~20),需要花费很多时间,而且我正在寻找一种有效的方法。

所以,如果我的URN如下:urn:upnp-org:device:TestDevice:2.2.5,我想拥有 urn:upnp-org:device:TestDevice:*,我该怎么办?

我试过

urn:upnp-org:device:TestDevice: urn:upnp-org:device:TestDevice:*

有没有通配符?占位符?

1 个答案:

答案 0 :(得分:2)

我认为您滥用M-SEARCH的版本控制功能。 ST版本表示界面版本,而非实施版本,预计更高版本完全向后可合并。因此, 能够搜索设备的任何版本,只需使用已知最低版本填充ST:即可。 所有设备都会回复您,但使用的是您搜索的版本,而不是实际版本(因为它们向后兼容)。没有什么比“通配符”更好,因为设备应该尽力满足M-SEARCH要求,而不是吹嘘他们的实际版本。

我建议仔细阅读UPnP设备架构文档,第1.2.2和1.2.3章,围绕M-SEARCH请求和响应。

如果您想将UPnP用于实施版本发现(这是完全合法的),我建议使用返回该信息的函数来实现自定义服务。你已经有了自定义设备,据我所知。