0

我正在尝试与ONVIF认证设备交互,例如能够访问简单的设备信息。

我一直在尝试使用另一个成员在此处提供的以下代码:

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

但是,我无法理解DeviceClient的功能是什么以及它的作用。我试图在ONVIF WSDLs和作为一个类上找到它,但无济于事。我对C#WSDLsONVIF非常陌生,因此感谢任何帮助。

提前致谢!

4

3 回答 3

4

当我的代码无法识别DeviceClientMediaClient分类时,我遇到了类似的问题。从 Hugo 的评论中,我得到了线索,并从我已经添加为 Web 引用的 C# 项目中删除了 OnVif 引用。然后简单地添加以下参考作为服务参考,它对我有用:

  1. http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl
  2. http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl

下面是我从 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);
于 2014-02-20T19:58:50.523 回答
1

我使用 vs2010 命令提示符将 devicemngmnt.wsdl 文件转换为 .cs 文件,但代码文件不包含“deviceclient”。
我还尝试将您的 xml 片段添加到 .wsdl 文件中,当我尝试使用 VS2010 命令提示符将 .wsdl 转换为 .cs 文件时,我收到此错误。

错误:无法从命名空间“ http://www.onvif.org/ver10/device/wsdl ”导入绑定“DeviceBinding ”。

于 2013-06-08T12:12:08.370 回答
0

在敲了几次头之后,我终于意识到了我的问题。

我必须以以下格式向 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) 引用。

希望这可以帮助人们。

于 2012-06-21T20:19:52.830 回答