标签: ws-discovery

如何在C#中发现onvif设备

我正在开发一个应用程序,它将探测连接在网络上的ONVIF设备以进行自动发现.根据ONVIF Core规范,Probe消息的SOAP格式为:

 <?xml version="1.0" encoding="UTF-8"?>
<e:Envelope xmlns:e="http://www.w3.org/2003/05/soap-envelope"
xmlns:w="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:dn="http://www.onvif.org/ver10/network/wsdl">
<e:Header>
<w:MessageID>uuid:84ede3de-7dec-11d0-c360-f01234567890</w:MessageID>
<w:To e:mustUnderstand="true">urn:schemas-xmlsoap-org:ws:2005:04:discovery</w:To>
<w:Action
a:mustUnderstand="true">http://schemas.xmlsoap.org/ws/2005/04/discovery/Pr
obe</w:Action>
</e:Header>
<e:Body>
<d:Probe>
<d:Types>dn:NetworkVideoTransmitter</d:Types>
</d:Probe>
</e:Body>
</e:Envelope>
Run Code Online (Sandbox Code Playgroud)

如何在WCF中发送此消息以发现onvif deivce?

c# wcf ws-discovery ip-camera onvif

10
推荐指数
1
解决办法
1万
查看次数

如何使用wsdl2java为wsdl生成SOAP 1.2绑定?

我简要说明:

如何让wsdl2java生成SOAP 1.2绑定?

详细说明:

我使用工具(apache cxf 3.0.2)为wsdl生成了java服务类wsdl2java:

MBA-Anton:bin asmirnov$ ./wsdl2java -server -catalog /tmp/wsdl/catalog  -d /tmp/onvif/server http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl
Run Code Online (Sandbox Code Playgroud)

然后我创建了服务代码并运行它,它正在运行:

public static void main(String args[]) throws InterruptedException {
        System.out.println("Starting Server");
        Endpoint.publish("udp://239.255.255.250:3702", new DiscoveryService());

        System.out.println("Server ready...");

        Thread.sleep(10 * 60 * 1000); // 10 min
        System.out.println("Server exiting");
        System.exit(0);
    }
Run Code Online (Sandbox Code Playgroud)

开始记录:

Starting Server
28.11.2014 19:51:59 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://www.onvif.org/ver10/network/wsdl}DiscoveryService from class org.onvif.ver10.network.wsdl.DiscoveryLookupPort
28.11.2014 19:52:00 org.apache.cxf.endpoint.ServerImpl initDestination
INFO: Setting the server's publish address to be udp://239.255.255.250:3702
28.11.2014 19:52:00 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
INFO: …
Run Code Online (Sandbox Code Playgroud)

xml wsdl cxf wsdl2java ws-discovery

8
推荐指数
0
解决办法
3181
查看次数

适用于Android的WS-Discovery实施

我需要在android上使用WS-Discovery.我用谷歌搜索了将近一天但没有找到任何东西.
如果你在我的情况下你会怎么做?

android ws-discovery

7
推荐指数
1
解决办法
721
查看次数

在具有多个IP地址的网络接口上发现WCF Web服务

我正在尝试DiscoveryClient使用此代码使用WCF进行Web服务发现:

// Setup the discovery client (WSDiscovery April 2005)
DiscoveryEndpoint discoveryEndpoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);
DiscoveryClient discoveryClient = new DiscoveryClient(discoveryEndpoint);

// Setup the wanted device criteria
FindCriteria criteria = new FindCriteria();
criteria.ScopeMatchBy = new Uri("http://schemas.xmlsoap.org/ws/2005/04/discovery/rfc3986");
criteria.Scopes.Add(new Uri("onvif://www.onvif.org/"));

// Go find!
criteria.Duration = TimeSpan.FromMilliseconds(duration);
discoveryClient.FindAsync(criteria, this);
Run Code Online (Sandbox Code Playgroud)

这在具有分配给单个网络接口的单个​​IP地址(10.1.4.25)的计算机上非常有效.广播从10.1.4.25发送到239.255.255.250,我从同一子网上的5台设备获得响应.

但是,当机器在同一个接口上有多个IP时,它似乎选择一个源IP并从中发送请求.在这种情况下,我从单个设备获得一个169.254地址的回复.

我已经尝试设置UdpDiscoveryEndpoint.TransportSettings.MulticastInterfaceId一个合适的接口ID,但它没有帮助,因为它识别单个接口,而不是特定的IP.该UdpDiscoveryEndpoint.ListenUri属性还返回多播地址,因此不会影响源IP. UdpDiscoveryEndpoint.Address是发现协议的URN.

有什么办法可以强制它从特定的IP地址发送,或理想情况下,在每个配置的IP上发送多个请求?

我也尝试过ONVIF设备管理器似乎有同样的问题.

请注意,这不是将服务绑定到特定或"所有地址"IP.它是关于发送请求的IP.

c# wcf networking web-services ws-discovery

5
推荐指数
1
解决办法
1693
查看次数

Java的WS-Discovery实现

是否有针对JAX-WS RI,Axis2,CXF或其他工具包的WS-Discovery规范的任何实现?

java web-services ws-discovery

4
推荐指数
1
解决办法
3132
查看次数

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

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

我对网络服务世界(以及一般的网络)还是个新手,所以如果我说了什么蠢话,请原谅我。不过,我自己也为此付出了很多努力:我阅读了大量的ONVIF Core SpecONVIF Application Programmer's GuideWS-Discovery Specific。如果可以的话,我会总结一下我所知道的,以便您可以告诉我我是否走在正确的道路上:

  1. “Web 服务”是使用独立于平台和语言的 Web 服务标准(例如 IP 网络上的 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 …

java soap ws-discovery onvif

4
推荐指数
1
解决办法
1万
查看次数

Onvif ip camera服务发现

我需要发现支持onvif协议的局域网中的所有ip摄像头.我尝试使用WSDiscoveryClient,但它没有发现onvif服务,尽管它发现了其他服务.它就像onvif没有响应来自WSDiscoveryClient的探测.Onvif设备管理器可以进行发现,所以我知道可以做到这一点.有谁知道怎么做?

java ws-discovery onvif

1
推荐指数
1
解决办法
6620
查看次数

WS-Discovery适用于不同逻辑网络上的摄像机

我有一个运行python的单元,需要使用ws-discovery来定位可能位于不同逻辑网络上的onvif摄像机。有人知道这是否可能吗?

(我在使用此库的相同逻辑网络上得到了发现:https : //github.com/hlamer/python-ws-discovery/blob/master/WSDiscovery.py

经过一番搜索,我遇到了听起来很有希望的“远程发现代理”,但我无法弄清楚它们到底是什么。

ws-discovery

1
推荐指数
1
解决办法
1352
查看次数

标签 统计

ws-discovery ×8

java ×3

onvif ×3

c# ×2

wcf ×2

web-services ×2

android ×1

cxf ×1

ip-camera ×1

networking ×1

soap ×1

wsdl ×1

wsdl2java ×1

xml ×1