Определение DeviceClient(Bind, endPointAddress)

Я пытаюсь подключиться к сертифицированному оборудованию ONVIF, например получить доступ к простой информации об устройстве.

Я пытался использовать следующий код, предоставленный другим участником здесь:

Аутентификация ONVIF в .NET 4.0 с Visual Studios 2010

Однако мне трудно понять, что такое функция DeviceClient и что она делает. Я пытался найти его в ONVIF WSDL и как класс, но безуспешно. Я новичок в C#, WSDL и ONVIF, поэтому буду признателен за любую помощь.

Заранее спасибо!


person Hugo Jimenez    schedule 18.06.2012    source источник


Ответы (3)


Я столкнулся с похожей проблемой, когда мой код не смог распознать классы DeviceClient и MediaClient. Из комментариев Хьюго я получил подсказку и удалил ссылки OnVif из моего проекта C#, которые я уже добавил как веб-ссылки. Затем просто добавил следующие ссылки в качестве ссылок на службы, и это сработало для меня:

  1. http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl
  2. http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl

Ниже приведен фрагмент рабочего кода, который я взял из другого сообщения на StackOverflow.

ServicePointManager.Expect100Continue = false;
var endPointAddress = new EndpointAddress("http://" + cameraAddress + "/onvif/device_service");
var httpTransportBinding = new HttpTransportBindingElement { AuthenticationScheme = AuthenticationSchemes.Digest };
var textMessageEncodingBinding = new TextMessageEncodingBindingElement { MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None) };
var customBinding = new CustomBinding(textMessageEncodingBinding, httpTransportBinding);
var passwordDigestBehavior = new PasswordDigestBehavior(adminName, adminPassword);
var deviceClient = new DeviceClient(customBinding, endPointAddress);
deviceClient.Endpoint.Behaviors.Add(passwordDigestBehavior);
person theGeekster    schedule 20.02.2014

Я конвертирую файл devicemngmnt.wsdl в файл .cs с помощью командной строки vs2010, но файл кода не содержит «deviceclient».
Также я пытался добавить ваш фрагмент xml в файл .wsdl, и когда я пытался преобразовать .wsdl в файл .cs с помощью командной строки VS2010 я получаю эту ошибку.

Ошибка: невозможно импортировать привязку «DeviceBinding» из пространства имен «http://www.onvif.org/ver10/device/wsdl'.

person cimey    schedule 08.06.2013

Несколько раз ударившись головой, я наконец осознал свою проблему.

Мне пришлось добавить службу в wsdl в формате:

   <wsdl:service name="DeviceService">
     <wsdl:port name="DevicePort" binding="tds:DeviceBinding">
       <soap:address location="http://ip/onvif/device_service"/>
     </wsdl:port>
   </wsdl:service>

После этого нужно было просто добавить его в проект как ссылку на службу, а не веб-ссылку. После этого библиотека подхватила ссылку DeviceClient(Bind, endPoint).

Надеюсь, это поможет людям.

person Hugo Jimenez    schedule 21.06.2012