gpt4 book ai didi

python - ONVIF-Python + ZEEP : create_service not working

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:30 24 4
gpt4 key购买 nike

我正在使用 ONVIF 协议(protocol)实现一个应用程序。有一个 WSDL 文件 https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl我必须与之合作。但需要定义默认服务,在WSDL文件中添加以下代码:

<wsdl:service name="DeviceService">
<wsdl:port name="DevicePort" binding="tds:DeviceBinding">
<soap:address location="http://ip_address/onvif/device_service"/>
</wsdl:port>
</wsdl:service>

但由于以下几点,这是不可能的:

  1. 要将节点添加到 WSDL 文件中,您必须下载 WSDL 文件(这不是一个真正的问题,因为我暂时因为性能原因下载了该文件)
  2. 应用程序应该与不同网络中的许多IP摄像机通信,因此不可能定义行:<soap:address location="http://ip/onvif/device_service"/>

所以我正在寻找一些解决方案,我在 Zeep 文档(http://docs.python-zeep.org/en/master/client.html#creating-new-serviceproxy-objects)中找到了它,其中写道:

There are situations where you either need to change the SOAP address from the one which is defined within the WSDL or the WSDL doesn’t define any service elements.

所以我尝试这样称呼:

client = Client(
wsdl = '/path/to/local/wsdl_file.wsdl',
wsse = self.InitSecurity(),
service_name = 'DeviceService',
port_name = 'DevicePort'
)

service = client.create_service(
'{http://www.onvif.org/ver10/device/wsdl}DeviceBinding',
'http://ip_address/onvif/device_service'
)

但是当我运行脚本时,抛出以下异常:

ValueError: There is no default service defined. This is usually due to missing wsdl:service definitions in the WSDL

当我直接修改 WSDL 文件(添加上面的节点)时,一切正常。

请问有什么想法吗?我已经战斗了一段时间了,所以我需要踢一点。

谢谢。

最佳答案

service = client.create_service() 应该可以工作(另请参阅 https://github.com/mvantellingen/python-zeep/issues/106 以获得相同的 wsdl)。

您是否使用创建的服务对象进行后续调用(例如 service.Operation() 而不是客户端?

关于python - ONVIF-Python + ZEEP : create_service not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42342361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com