Я работаю с камерами onvif, но у меня есть несколько проблем с обнаружением.
Используя очень простой код обнаружения, как показано ниже, я получаю ответы от большинства устройств в нашей сети, но некоторые из них отбрасываются. Я добавил ведение журнала трассировки, и я вижу сообщения, отбрасываемые клиентом обнаружения, с описанием
Сообщение ProbeMatches с messageId='uuid:xxx' и refersTo='uuid:xx' было удалено клиентом DiscoveryClient, так как либо соответствующая операция поиска была завершена, либо значение 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);
}