定义DeviceClient(Bind,endPointAddress)

时间:2012-06-18 21:40:04

标签: c# wsdl onvif

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

我一直在尝试使用以下代码,由其他成员提供:

ONVIF Authentication in .NET 4.0 with Visual Studios 2010

然而,我无法理解 DeviceClient 的功能是什么以及它的作用。 我试图在 ONVIF WSDL 上找到它并作为一个类,但没有用。 对 C# WSDL ONVIF 非常陌生,因此非常感谢您的帮助。

提前致谢!

3 个答案:

答案 0 :(得分:3)

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

  1. http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl
  2. http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl
  3. 下面是我从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);
    

答案 1 :(得分:1)

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

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

答案 2 :(得分: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)引用。

希望这可以帮助人们。