howto_onvif_ru


Спецификация ONVIF - детали реализации


Previous Entry Share Next Entry
ONVIF и SOAP
fall, evil, emotions, angel, heaven
ran_dom wrote in howto_onvif_ru
ONVIF построен на обмене SOAP сообщениями. Какие библиотеки могут быть полезны?
Если вы пишете встраиваемую систему на чистом C - у вас выбор невелик: взять gSoap или написать костыль самому. И хотя библиотека - тот еще глюкодром (почитайте вопросы программистов по подключению плагинов для https или авторизации пользователя), но по возможностям и переносимости у него нет конкурентов.
Если нужен клиент - есть kSoap. Пробовали, работает.
Пробовали использовать Axis2 - она совсем не подходит для ONVIF. Не умеет работать с сотнями методов и тысячами типов данных.

.Net
Для пишущих управляемый код под Windows это будет естественным решением, но надо иметь в виду следующее:
1 - по умолчанию не создаются тела исключений для ошибок, передаваемых через http 400. Для http 500 создаются. Лечится внедрением в стек протоколов своего компонента вместо стандартного (легко получается из стандартного, пару строчек поменять - нужно только знать каких😊).
2 - не сериализуются переменные после Anydata, она съедает все. В общем виде не лечится никак, для важных частных случаев приходится делать ручной разбор.
3 - может пропускать ситуации с отсутствием в XML обязательной переменной, спокойно вставляя null. Приходится делать ручные проверки.
4 - в ONVIF типичный сценарий работы с конфигурациями требует глубокое копирование, которое в общем виде невозможно в .Net.
5 - протокол WS-Discovery реализован только начиная с .Net 4.0 и способом несовместимым с реализацией большинством камер.

  • 1
6. Не обрабатываются ситуации, если устройство ВДРУГ на один из запросов хочет прислать ответ в виде multipart. Устройству это не запрещено, а вот в .Net не принято

По первому пункту хочется задать пару вопросов :) но наверное лучше сначала не здесь...

Edited at 2014-01-28 03:52 am (UTC)

Аня - я помню что на самом деле это не пара пустяков, и была проведена большая работа чтобы найти эти несколько мест, плюс пришлось клонировать несколько нетощих классов. но детали - это не то, что я хотел раскрывать в этом посте.

Про мультипарт - отдельное спасибо!

Да я не ради деталей, просто любопытно стало - вдруг нашлось решение короче :)

Пункт 4 можно поподробнее? Это про сценарии из серии "взять развесистую конфигурацию типа профиля и для каких-то надобностей сделать её клон"?

именно. традиционно (почти) глубокое копирование получается прогоном через XML, но мы обнаружили ситуации, когда это не работает

  • 1
?

Log in

No account? Create an account