2012-06-18 1 views
0

Я пытаюсь взаимодействовать с сертифицированным оборудованием ONVIF, например, иметь доступ к простой информации об устройстве.Определение DeviceClient (Bind, endPointAddress)

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

ONVIF Authentication in .NET 4.0 with Visual Studios 2010

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

Заранее благодарен!

ответ

0

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

мне пришлось добавить службу в 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).

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

1

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

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

3

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

  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);