我正在尝试与 ONVIF 认证的设备进行交互,例如能够访问简单的设备信息。
我一直在尝试使用以下代码,由其他成员提供:
ONVIF Authentication in .NET 4.0 with Visual Studios 2010
然而,我无法理解 DeviceClient 的功能是什么以及它的作用。 我试图在 ONVIF WSDL 上找到它并作为一个类,但没有用。 对 C#, WSDL 和 ONVIF 非常陌生,因此非常感谢您的帮助。
提前致谢!
答案 0 :(得分:3)
当我的代码无法识别DeviceClient
和MediaClient
类时,我遇到了类似的问题。从Hugo的评论中我得到了线索并从我的C#项目中删除了OnVif引用,我已经将其添加为Web引用。然后简单地添加以下引用作为服务引用,它对我有用:
下面是我从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”。
无法导入'GetServices'操作。
答案 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)引用。
希望这可以帮助人们。