使用Visual Studios 2010的.NET 4.0中的ONVIF身份验证

|| 我的任务是尝试与建筑物中的ONVIF摄像机建立通信,以最终升级公司的domotic解决方案以自动识别ONVIF摄像机并能够设置它们并使用其服务。 我已经可以通过这种方式收集一些基本信息,例如其型号,其MAC地址和其固件版本:
    EndpointAddress endPointAddress = new EndpointAddress(\"<mycameraurl:<mycameraport>/onvif/device_service\");
    CustomBinding bind = new CustomBinding(\"DeviceBinding\");
    DeviceClient temp = new DeviceClient(bind, endPointAddress);
    String[] arrayString = new String[4];
    String res = temp.GetDeviceInformation(out arrayString[0], out arrayString[1], out arrayString[2], out  arrayString[3]);
    MessageBox.Show(\"Model \" + arrayString[0] + \", FirmwareVersion \" + arrayString[1] + \", SerialNumber \" + arrayString[2] + \", HardwareId \" + arrayString[3]);
我的app.config文件中有customBinding的xml规范:
  <customBinding>
    <binding name=\"DeviceBinding\">
      <textMessageEncoding maxReadPoolSize=\"64\" maxWritePoolSize=\"16\"
          messageVersion=\"Soap12\" writeEncoding=\"utf-8\">
        <readerQuotas maxDepth=\"32\" maxStringContentLength=\"8192\" maxArrayLength=\"16384\"
            maxBytesPerRead=\"4096\" maxNameTableCharCount=\"16384\" />
      </textMessageEncoding>
      <httpTransport manualAddressing=\"false\" maxBufferPoolSize=\"524288\"
          maxReceivedMessageSize=\"65536\" allowCookies=\"false\" authenticationScheme=\"Anonymous\"
          bypassProxyOnLocal=\"false\" decompressionEnabled=\"true\" hostNameComparisonMode=\"StrongWildcard\"
          keepAliveEnabled=\"false\" maxBufferSize=\"65536\" proxyAuthenticationScheme=\"Anonymous\"
          realm=\"\" transferMode=\"Buffered\" unsafeConnectionNtlmAuthentication=\"false\"
          useDefaultWebProxy=\"true\" />
    </binding>
  </customBinding>
我的问题是,对我而言,我不可能深入问问相机。我尝试执行的任何操作都会收到“ 400-错误的请求”错误,并且根据我所读的内容,这是因为我需要处理摄像机的身份验证。 问题是,我发现的关于WS-Security的所有内容(似乎由ONVIF使用)确实非常混乱,具有许多不同的解决方案,并且对我没有任何实际作用。例如,这里的帖子听起来很简单,但是我尝试创建UserNameSecurityToken,但仍然收到400错误的请求错误。由于我不知道这是否是因为我的Token系统写错了,是否是因为相机不支持我的尝试。 我已经尝试过WSHttpBinding并将其置于用户名模式,但是使用WSHttpBinding破坏了我能够创建的基本信息发现(带有MustUnderstand错误)... 对我有什么建议吗?简单的WS-Security / .NET,C#/ ONVIF教程,一切都会被接受。     
已邀请:
行:
EndpointAddress serviceAddress = new EndpointAddress(\"<mycameraurl:<mycameraport>/onvif/device_service\");

HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();

httpBinding.AuthenticationScheme = AuthenticationSchemes.Digest;

var messageElement = new TextMessageEncodingBindingElement();

messageElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None);

CustomBinding bind = new CustomBinding(messageElement, httpBinding);

// Add our custom behavior - this require the Microsoft WSE 3.0 SDK

PasswordDigestBehavior behavior = new PasswordDigestBehavior(CameraASCIIStringLogin, CameraASCIIStringPassword);

DeviceClient client = new DeviceClient(bind, serviceAddress);

client.Endpoint.Behaviors.Add(behavior);

// We can now ask for information

client.GetSystemDateAndTime();

client.GetNetworkInterfaces();

client.GetScopes();

client.GetRelayOutputs();

client.GetWsdlUrl();
问题在于,在提供除最简单信息之前的任何信息之前,相机需要进行身份验证,而最棘手的部分是最终捕获有效的xml onvif消息以在我自己的软件中重新创建它。     

要回复问题请先登录注册