使用轴摄像头进行Onvif认证P1344 c#

时间:2011-12-09 12:16:51

标签: c# authentication onvif

我完全坚持 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 :(得分:0)

有几件事可能导致这种情况:

  1. 您已通过网络浏览器设置了root密码,从而锁定了ONVIF用户。登录相机并添加ONVIF用户(有一个特殊页面)

  2. 您的密码摘要仅包含密码,其中应包含随机随机数,创建时间和密码的串联。

  3. 您的本地时钟与相机的时钟不同步。调用getSystemDateAndTime来读取远程时钟并记录你之间的时差。

  4. 这些是让我放慢速度的4个主要因素中的3个(第4个是导入wsdl,但看起来你已经得到了它)

答案 1 :(得分:0)

尝试这种方式:

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非常重要。