我正在尝试与ONVIF认证设备交互,例如能够访问简单的设备信息。
我一直在尝试使用另一个成员在此处提供的以下代码:
.NET 4.0 中的 ONVIF 身份验证与 Visual Studios 2010
但是,我无法理解DeviceClient的功能是什么以及它的作用。我试图在ONVIF WSDLs和作为一个类上找到它,但无济于事。我对C#、WSDLs和ONVIF非常陌生,因此感谢任何帮助。
提前致谢!
我正在尝试与ONVIF认证设备交互,例如能够访问简单的设备信息。
我一直在尝试使用另一个成员在此处提供的以下代码:
.NET 4.0 中的 ONVIF 身份验证与 Visual Studios 2010
但是,我无法理解DeviceClient的功能是什么以及它的作用。我试图在ONVIF WSDLs和作为一个类上找到它,但无济于事。我对C#、WSDLs和ONVIF非常陌生,因此感谢任何帮助。
提前致谢!
当我的代码无法识别DeviceClient
和MediaClient
分类时,我遇到了类似的问题。从 Hugo 的评论中,我得到了线索,并从我已经添加为 Web 引用的 C# 项目中删除了 OnVif 引用。然后简单地添加以下参考作为服务参考,它对我有用:
下面是我从 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);
我使用 vs2010 命令提示符将 devicemngmnt.wsdl 文件转换为 .cs 文件,但代码文件不包含“deviceclient”。
我还尝试将您的 xml 片段添加到 .wsdl 文件中,当我尝试使用 VS2010 命令提示符将 .wsdl 转换为 .cs 文件时,我收到此错误。
错误:无法从命名空间“ http://www.onvif.org/ver10/device/wsdl ”导入绑定“DeviceBinding ”。
无法导入操作“GetServices”。
在敲了几次头之后,我终于意识到了我的问题。
我必须以以下格式向 wsdl 添加服务:
<wsdl:service name="DeviceService">
<wsdl:port name="DevicePort" binding="tds:DeviceBinding">
<soap:address location="http://ip/onvif/device_service"/>
</wsdl:port>
</wsdl:service>
之后,只需将其作为服务引用而不是 Web 引用添加到项目中。之后,该库获取了 DeviceClient(Bind, endPoint) 引用。
希望这可以帮助人们。