更改肥皂绑定

Change zeep binding

我正在尝试连接到定义 2 个服务位置的 soap 端点,其中一个无效。如何更改绑定以使用其他服务。 我是 SOAP 的新手,请查看文档 says:

from zeep import Client
from zeep import xsd

client = Client('http://my-endpoint.com/production.svc?wsdl')

service2 = client.bind('SecondService', 'Port12')
service2.someOperation(myArg=1)

但是没有提到论点是什么

我的服务定义为:

<wsdl:service name="PackageInq">
<wsdl:port name="BasicHttpBinding_IPackageInq" binding="tns:BasicHttpBinding_IPackageInq">
<soap:address location="http://invalid.local:8989/TopUp/PackageInq.svc"/>
</wsdl:port>
<wsdl:port name="BasicHttpsBinding_IPackageInq" binding="tns:BasicHttpsBinding_IPackageInq">
<soap:address location="https://valid.com/TopUp/PackageInq.svc"/>
</wsdl:port>
</wsdl:service>

我已经尝试过类似的事情 client.bind('BasicHttpsBinding_IPackageInq') 并得到:

ValueError: Service not found

另外,如果你知道有什么好的文档我可以阅读,如果你推荐的话,我会很高兴。

更新 我找到了正确的语法

client.bind('PackageInq', 'BasicHttpsBinding_IPackageInq') 

但仍然使用

client.service.Method()

再次命中无效端点

仔细阅读文档后 client.bind returns a service 你应该使用它而不是客户端。

所以会是like

from zeep import Client
from zeep import xsd

client = Client('http://my-endpoint.com/production.svc?wsdl')

service2 = client.bind('SecondService', 'Port12')
service2.someOperation(myArg=1)

soap 版本 4.0.0.

         <wsdl:service name="RiskAnalysis">
            <wsp:PolicyReference xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" URI="#BasicPolicy"/>
            <wsdl:port name="RiskAnalysisHttpsSoap11Endpoint" binding="tns:RiskAnalysisSoap11Binding">
                <soap:address location="https://addreshere/"/>
            </wsdl:port>
            <wsdl:port name="RiskAnalysisHttpsSoap12Endpoint" binding="tns:RiskAnalysisSoap12Binding">
                <soap12:address location="https://addreshere/"/>
            </wsdl:port>
        </wsdl:service>


     from zeep import Client
        
     requestPayload = {'Attachment': inputQuery.encode() } 

     soapClient = Client('http://my-endpoint.com/production?wsdl', service_name=RiskAnalysis, port_name=RiskAnalysisHttpsSoap12Endpoint )
     soapClient.client.service.OPERATIONS(**requestPayload)