问题标签 [ws-discovery]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
812 浏览

java - 在 Android 上实现 ONVIF WS-Discovery

我需要在一个 android 应用程序中实现 ONVIF,直到现在我还没有取得太大的成功。我尝试使用evercam,但使用它会导致“ClassNotFoundException”。这是完整的堆栈跟踪。

有没有人有任何想法如何以不同的方式实现它?

0 投票
1 回答
1007 浏览

c# - ASP.NET Core 中的 WCF UDP Discovery 有很好的替代品吗?

我正在寻找 ASP.NET Core 中的 UDP 服务发现功能。此功能可通过 System.ServiceModel.Discovery 在 .NET Framework WCF 中使用(例如,使用 WS-Discovery 的 UdpDiscoveryEndpoint)。

预期结果是允许 LAN 上的客户端发现 ASP.NET Core WebAPI,而无需知道服务器的名称/IP 和端口。

我看到了一些可用的服务发现框架,例如 Consul,但它们似乎不支持 UDP 广播。

我可以使用类似于如何使用 UDP 广播进行网络发现中的解决方案的代码编写自己的代码,但我不得不质疑是否已经有更好的东西可用。

0 投票
0 回答
87 浏览

wcf - WCF发现如何在不同的子网中找到服务器端点

我正在使用 WCF 发现(Ad-hoc)在 Intranet 中查找可用的 WCF 服务。
当客户端和服务器在同一子网(10.224.112.*)时,客户端可以成功找到该服务器。
但是当它们在不同的子网中时(客户端 10.224.112.**,服务器 10.224.113.*),客户端再也找不到这个服务器了。
即使在不同的子网中,我应该如何让客户端再次找到服务器?

0 投票
2 回答
6346 浏览

java - 如何使用 WS-Discovery 规范在 Java 中发现网络上的 ONVIF 设备?

我正在尝试使用一些 Java 代码发现 ONVIF 设备。具体来说,我正在尝试获取他们的设备服务地址(我相信这只是他们的 IP 地址?),正如ONVIF 核心规范(在第 4.3 节中)所指出的那样,“成功的发现提供了设备服务地址。一旦客户端拥有设备服务地址它可以通过设备服务接收详细的设备信息...”。最终获得网络上 ONVIF 设备的详细信息是我的目标。一般来说,我也在寻找一些与使用 ONVIF 规范有关的指导。

我对 Web 服务世界(以及一般网络)还是新手,所以如果我说任何愚蠢的话,请原谅我。但是,我自己为此付出了很多努力:我已经阅读了大量的ONVIF Core SpecONVIF Application Programmer's GuideWS-Discovery Specification。如果可以的话,我会总结一下我所知道的,这样你就可以告诉我我是否走在正确的轨道上:

  1. “Web 服务”是在 IP 网络上使用独立于平台和语言的 Web 服务标准(例如 XML、SOAP 和 WSDL)的标准技术的名称。基本思想是我们希望能够从任何编程语言调用有效的方法/函数(服务)。
  2. Web 服务通常托管在服务器上。但在 ONVIF 用例中,Web 服务提供商是 ONVIF 设备(例如,IP 摄像机)。因此,为了从任何语言与设备交互,我们使用 Web 服务操作/调用,因为 Web 服务调用可以用任何语言实现。
  3. XML 是数据描述语法(使用它是因为它与语言无关;任何语言都可以解析它)。SOAP 是用于来回获取注入 SOAP 的 XML 文档的通信协议(基本上,进行我们的方法调用)。WSDL 用于描述服务(它是基于 XML 的 Web 服务接口描述)。我在这里下载了用于设备管理的 WSDL ,并通过 WSDL 编译器wsimport(由 JDK 提供)从 WSDL 中生成 Java 类以在我的代码中使用。但我知道调用这些方法将在设备发现之后进行,对吗?
  4. ONVIF 设备是根据 WS-Discovery 规范发现的。如ONVIF 应用程序程序员指南中第 13 页和第 14 页所述,您发送一条Probe消息,匹配探测器约束的设备发回一条消息ProbeMatch

这是我开始感到困惑的地方。我究竟如何在 Java 中发送此消息?ONVIF Application Programmer's Guide 在第 15 页提供了一些伪代码,但我不知道如何实现它。该指南中的第 4.3.1 节特别是我坚持的内容。我知道“范围”和“类型”只是您可以嵌入到探针中的约束,但它们不是必需的(根据WS discovery spec的第 5 页)。由于我想发现所有设备,我认为我不需要任何限制即可开始,对吧?

因此,该指南还在第 110 页提供了用于发现的示例 SOAP 消息。从中删除类型声明(因为我不想要那个约束),我知道我要发送的 SOAP 消息将是(我相信?)这个:

而且我也了解 WS-Discovery 技术使用地址 239.255.255.259 和 UDP 端口 3702 ......但这就是我得到的结束。如何在 Java 中将该 SOAP 消息发送到该地址和端口?如何读取响应(我认为我会以注入 SOAP 的 XML 文档的形式返回 ProbeMatch 消息,因此我需要解析该 XML 以获取XAddrs,但不确定)。我是否需要以某种方式将该 SOAP 消息的 UDP 广播发送到该地址?

TL;DR:我相信要进行 ONVIF 设备发现,我需要将上面的 SOAP 消息发送到 UDP 端口 3702 上的地址 239.255.255.259。我不知道如何在 Java 中执行此操作,只是在寻找一些指导;我什至不确定我是否在正确的轨道上进行设备发现。

0 投票
1 回答
42 浏览

java - 将单播数据包发送到多播端口

我打开了一个多播套接字并正在接收多播消息。从这个线程,似乎同一个多播套接字也应该能够接收单播消息。但是,我什么也得不到。

编辑:端口号似乎是问题。ws-discovery 使用端口 3702 进行单播,这与我正在尝试做的事情有关。我正在追踪一个问题,即客户端对服务的探测没有被服务的多播套接字捕获。我在 Windows 上运行它。

我的多播服务器:

和客户端代码: