Обнаружение - ответ ProbeMatch отбрасывается
Я работаю с камерами onvif, но у меня есть несколько проблем с обнаружением.
Используя очень простой код обнаружения, как показано ниже, я получаю ответы от большинства устройств в нашей сети, но некоторые из них отбрасываются. Я добавил запись трассировки, и я могу видеть сообщения, отбрасываемые клиентом обнаружения с описанием
Сообщение ProbeMatches с messageId='uuid:xxx' и relatedTo='uuid:xx' было удалено DiscoveryClient, потому что либо соответствующая операция Find была выполнена, либо значение relatedTo недопустимо.
Глядя на значение relatedTo в трассировке, а также в MS Network Monitor, они кажутся точно такими же, а отбрасываемые - в первых нескольких ответах, так что я не думаю, что они есть после завершения операции.
Я также запустил диспетчер устройств onvif, который находится на sourceforge, у него те же проблемы, но с разными устройствами, кто-нибудь сталкивался с этим раньше или есть идеи, что может быть причиной этого.
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 ответ
Я столкнулся с такой же проблемой с некоторыми камерами ACTi (например, KCM-3911, I51) в режиме ONVIF. Два клиента ONVIF - инструмент тестирования ONVIF и диспетчер устройств Onvif - смогли обнаружить эти камеры, но не мой собственный код, который по сути эквивалентен вашему коду. Изучив журналы сообщений и трассировки WCF, которые содержат ту же ошибку, что и ваша, и сравнив ответы Probe и ProbeMatch от этих камер, я заметил, что в значениях messageId и relatedTo отсутствует префикс "urn:", требуемый для адресации WS.
Я связался со службой технической поддержки ACTi по поводу этого несоответствия, которое не соответствует спецификациям ONVIF, основанным на спецификации WS-адресации. В то же время я изучаю, как инструмент тестирования ONVIF и диспетчер устройств Onvif обрабатывают ProbeMatch для обнаружения этих камер, хотя то, что они делают, не должно соответствовать спецификациям, в противном случае они также будут отклонять ответы ProbeMatch. как WCF.