Как обнаружить устройства onvif в C #

m разрабатывает приложение, которое будет проверять устройства ONVIF, подключенные к сети, для автоматического обнаружения. Согласно спецификации ONVIF Core SOAP-формат сообщения Probe:

 


uuid:84ede3de-7dec-11d0-c360-f01234567890
urn:schemas-xmlsoap-org:ws:2005:04:discovery
http://schemas.xmlsoap.org/ws/2005/04/discovery/Pr
obe



dn:NetworkVideoTransmitter



Как я могу отправить это сообщение в WCF, чтобы обнаружить onvif deivce?

Ответы на вопрос(1)

Решение Вопроса

Обнаружение веб-сервиса WCF функции. ONVIF следует тому же стандарту, что и WCF. Вы'Вам нужно будет использовать класс DiscoveryClient для отправки зонда.

Это'Прошло много времени с тех пор, как ямы сделали это так, что это может быть не совсем правильно, но ваш код должен выглядеть примерно так: Многоадресный зонд найдет все обнаруживаемые устройства. Вы можете определить, ответило ли ваше устройство onvif, проверив метаданные для каждого ответа в обработчике событий. Если ты'по-прежнему не удается получить ответ, возможно, проблема в сети или устройстве. Если вы получите ответ, вы можете уточнить критерии поиска, чтобы уведомлять только требуемые типы.

class Program
{
    static void Main(string[] args)
    {
        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;
        // Edit: optionally specify contract type, ONVIF v1.0
        findCriteria.ContractTypeNames.Add(new XmlQualifiedName("NetworkVideoTransmitter",
            "http://www.onvif.org/ver10/network/wsdl"));

        discoveryClient.FindAsync(findCriteria);

        Console.ReadKey();
    }

    static void discoveryClient_FindProgressChanged(object sender, FindProgressChangedEventArgs e)
    {
        //Check endpoint metadata here for required types.

    }
}
 user182885517 нояб. 2012 г., 09:25
Дорогой Саймон, яЯ попробовал это, но не получил никакого ответа. Я'я путаюсь с этим элементом SOAP <d: типы>дп: NetworkVideoTransmitter </ D: Типы> Как это можно добавить в FindCriteria?
 user182885523 нояб. 2012 г., 08:44
Hurah ....! Я получил ответы от моего устройства ONVIF. Спасибо за это руководство Саймон.
 Simon Wood24 нояб. 2012 г., 01:30
Нет проблем. Может быть ты'хотел бы отметить мой ответ? :)
 Jesse Chisholm26 сент. 2014 г., 17:48
ПРИМЕЧАНИЕ. Согласно спецификации WS-Discovery ваши устройства ONVIF должны отвечать, даже если их нет ".ContractTypeNames» критерии. Целью критериев является уменьшение количества ответов, а не включение ответов. Однако многие устройства слишком ограничены в своей интерпретации спецификации. Некоторые приложения будут отправлять зонды с другими критериями в надежде найти все устройства, которые им действительно нужны, игнорируя ответы от устройств, которые они не используют.это действительно волнует.
 Simon Wood17 нояб. 2012 г., 14:42
Добавьте его в названия типов контрактов критериев поиска. FindCriteria.ContractTypeNames. В зависимости от версии onvif NetworkVideoTransmitter может быть указан как область, а не тип. Попробуйте выполнить асинхронный поиск без критериев. Используя обратный вызов, это позволит вам проверить ответы от всех обнаруживаемых устройств, которые должно быть включено на вашем устройстве onvif. Из этой информации вы сможете выполнить более точный поиск.

Ваш ответ на вопрос