私はONVIFプロトコルを使用してアプリケーションを実装しています。 WSDLファイルhttps://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdlがあります。ONVIF - Python + ZEEP:create_serviceが動作しない
<wsdl:service name="DeviceService">
<wsdl:port name="DevicePort" binding="tds:DeviceBinding">
<soap:address location="http://ip_address/onvif/device_service"/>
</wsdl:port>
</wsdl:service>
しかし、それは、これらの点にことはできません:しかし、それは、WSDLファイルに次のコードを追加するために、デフォルトのサービスを定義する必要がありますあなたがする必要がある、WSDLファイルにノードを追加する
- WSDLファイルをダウンロードしてください(これは実際の問題ではありません)。
- アプリケーションはさまざまなネットワークの多くの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ファイルを直接変更します(ノードabすべて)正常に動作します。
どうかありがとうございますか?私はしばらくして戦っているので、少し蹴る必要があります。
ありがとうございます。
残念ながら、それは私のために動作しませんが、私は:-(たい。あなたの答えの後、私は私のバージョンに気づきましたZeep(0.21.0)、それが原因かもしれないと思っていましたが、リリース日に合わせてcreate_service()メソッドが含まれているはずですが、1.1.0に更新しましたがまだ動作しません。 (デフォルトのサービスは定義されていません)、 "後続の呼び出し"では、私はclient.service.Operation()を呼び出していると思います。 clientとcreate_service)? – Honza
実際にエラーが発生する理由はありません.client.serviceオブジェクトはデフォルトのmappiですng。 create_serviceを使用して新しいものを作成するので、代わりにそれを使用する必要があります。したがって、my_service = client.create_service(..); my_service.operaton() – mvantellingen
あなたのアドバイスは答えでしたが、特定のバージョンのZeepとの組み合わせで回答しました。ちょっと奇妙ですが、Zeepを0.21.0から0.24.0にインストールしたとき、Zeepをバージョン0.26.0と0.27.0でインストールしたときに完全に動作します。これはXリクエストのうちの1つ(他のX -1の要求で例外がスローされました)、バージョン1.0.0と1.1.0のZeepをインストールすると、毎回「http.client.RemoteDisconnected:応答なしのリモートエンドクローズド接続」という例外がスローされました。だから私は各依存関係をアップグレードしようとしましたが、それは助けにはなりません。ありがとうございました。 – Honza