Onvif аутентификация с осью Камара P1344 c # - PullRequest
3 голосов
/ 09 декабря 2011

Я полностью застрял с ONVIF аутентификацией. Я думаю, что перепробовал все или, по крайней мере, почти все, и я не нахожу достаточно информации в Интернете. Я создал клиент-заглушку с помощью svcutil, мой код для аутентификации (один из них, потому что я много чего пробовал):

 string uri = "http://140.0.22.39/onvif/services";

 EndpointAddress serviceAddressPrueba = new EndpointAddress(uri);
 HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();
 httpBinding.AuthenticationScheme = AuthenticationSchemes.Digest;
 var messegeElement = new TextMessageEncodingBindingElement();
 messegeElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None);
CustomBinding bindprueba = new CustomBinding(messegeElement, httpBinding);
DeviceClient clientprueba = new DeviceClient(bindprueba, serviceAddressPrueba);
string passwordDigestBase64;
//HERE I PUT THE CODE TO ENCRYPT THE PASSWORD.
PasswordDigestBehavior behavior1 = new PasswordDigestBehavior("root",passwordDigestBase64);
clientprueba.Endpoint.Behaviors.Add(behavior1);
string d1;
string d2;
string d3;
string d4;

clientprueba.GetDeviceInformation(out d1, out d2, out d3, out d4);

После этого возникает следующая ошибка:

{"The remote server returned an unexpected response: (400) Bad Request."}

Я буду очень, очень признателен, если вы поможете мне с любой информацией, чтобы решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2013

Попробуйте так:

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

Обратите внимание, что важно установить ServicePointManager.Expect100Continue на false.

0 голосов
/ 03 мая 2012

Пара причин может вызвать это:

  1. Вы установили пароль root через веб-браузер, таким образом заблокировав пользователя ONVIF. Войдите в камеру и добавьте пользователя ONVIF (для этого есть специальная страница)

  2. Ваш дайджест пароля включает в себя только пароль, где он должен включать в себя объединение случайного одноразового номера, время создания и пароль.

  3. Ваши местные часы не синхронизированы с часами камеры. вызовите getSystemDateAndTime, чтобы прочитать удаленные часы и записать разницу во времени между вами.

Это были 3 из 4 основных вещей, которые замедляли меня (4-й импортировал wsdl, но, похоже, вы его уже получили)

...