使用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教程,一切都会被接受。
没有找到相关结果
已邀请:
1 个回复
犀寺扦
问题在于,在提供除最简单信息之前的任何信息之前,相机需要进行身份验证,而最棘手的部分是最终捕获有效的xml onvif消息以在我自己的软件中重新创建它。