发现 - 丢弃ProbeMatch响应

时间:2014-01-28 14:36:55

标签: c# wcf service-discovery onvif ws-discovery

我使用onvif相机,但发现时存在一些问题。

使用如下的非常基本的发现代码,我从网络上的大多数设备获得回复,但有一些被丢弃。我添加了跟踪日志记录,我可以看到发现客户端使用描述

丢弃的消息
  

DiscoveryClient删除了带有messageId ='uuid:xxx'和relateTo ='uuid:xx'的ProbeMatches消息,因为相应的Find操作已完成或   relateTo值无效。

查看跟踪中的relateTo值以及MS网络监视器中的relatedTo值,它们似乎完全相同,并且在前几个回复中被删除的值,所以我不认为它们是在操作完成之后。< / p>

我还运行了sourceforge上的onvif设备管理器,这有同样的问题,但设备不同,有没有人遇到过这个问题或有任何想法可能导致它。

public void TryToDiscoverClients()
    {

        System.Net.ServicePointManager.Expect100Continue = false;

        var endPoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);

        var discoveryClient = new DiscoveryClient(endPoint);
        discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged;

        FindCriteria findCriteria = new FindCriteria();
        findCriteria.Duration = TimeSpan.MaxValue;
        findCriteria.MaxResults = int.MaxValue;

        findCriteria.ContractTypeNames.Add(new XmlQualifiedName("NetworkVideoTransmitter", @"http://www.onvif.org/ver10/network/wsdl"));
        findCriteria.ContractTypeNames.Add(new XmlQualifiedName("Device", @"http://www.onvif.org/ver10/device/wsdl"));

        discoveryClient.FindAsync(findCriteria);

    }

    private void discoveryClient_FindProgressChanged(object sender, FindProgressChangedEventArgs e)
    {
        Results.Add(e);
    }

1 个答案:

答案 0 :(得分:0)

我在ONVIF模式下遇到了一些ACTi相机(例如KCM-3911,I51)的同样问题。两个ONVIF客户端 - ONVIF测试工具和Onvif设备管理器 - 能够发现这些摄像头,但不是我自己的代码,这基本上等同于您的代码。在检查包含与您的错误相同的错误的WCF消息和跟踪日志,并比较来自这些摄像头的Probe和ProbeMatch回复时,我注意到messageId和relateTo值都缺少&#34; urn:&#34; WS寻址所需的前缀。

我已与ACTi技术支持部门联系,了解这种不符合依赖于WS地址规范的ONVIF规范的差异。同时,我正在研究ONVIF测试工具和Onvif设备管理器如何处理ProbeMatch以发现这些摄像机,尽管他们正在做的事情必须不符合规范,否则他们也会拒绝ProbeMatch回复像WCF。