还有另一种方法来创建应该执行此操作的 ServiceProxy。
请参阅以下位置的文档:https://docs.python-zeep.org/en/master/client.html#creating-new-serviceproxy-objects https://docs.python-zeep.org/en/master/client.html#creating-new-serviceproxy-objects
默认的 ServiceProxy 实例是使用 WSDL 中的地址创建的,但是上述创建 ServiceProxy 的方法允许对地址进行更多控制。
的价值{http://my-target-namespace-here}myBinding
是您的绑定标识符。如果你做一个python -mzeep https://original-soap/wsdl
您应该得到像这样的输出(我在这里使用一些在线示例用于演示目的,因为我无权访问您的 WSDL):
> python -mzeep http://www.dneonline.com/calculator.asmx?WSDL
Prefixes:
xsd: http://www.w3.org/2001/XMLSchema
ns0: http://tempuri.org/
Global elements:
ns0:Add(intA: xsd:int, intB: xsd:int)
ns0:AddResponse(AddResult: xsd:int)
ns0:Divide(intA: xsd:int, intB: xsd:int)
ns0:DivideResponse(DivideResult: xsd:int)
ns0:Multiply(intA: xsd:int, intB: xsd:int)
ns0:MultiplyResponse(MultiplyResult: xsd:int)
ns0:Subtract(intA: xsd:int, intB: xsd:int)
ns0:SubtractResponse(SubtractResult: xsd:int)
Global types:
xsd:anyType
xsd:ENTITIES
xsd:ENTITY
xsd:ID
xsd:IDREF
xsd:IDREFS
xsd:NCName
xsd:NMTOKEN
xsd:NMTOKENS
xsd:NOTATION
xsd:Name
xsd:QName
xsd:anySimpleType
xsd:anyURI
xsd:base64Binary
xsd:boolean
xsd:byte
xsd:date
xsd:dateTime
xsd:decimal
xsd:double
xsd:duration
xsd:float
xsd:gDay
xsd:gMonth
xsd:gMonthDay
xsd:gYear
xsd:gYearMonth
xsd:hexBinary
xsd:int
xsd:integer
xsd:language
xsd:long
xsd:negativeInteger
xsd:nonNegativeInteger
xsd:nonPositiveInteger
xsd:normalizedString
xsd:positiveInteger
xsd:short
xsd:string
xsd:time
xsd:token
xsd:unsignedByte
xsd:unsignedInt
xsd:unsignedLong
xsd:unsignedShort
Bindings:
Soap11Binding: {http://tempuri.org/}CalculatorSoap
Soap12Binding: {http://tempuri.org/}CalculatorSoap12
Service: Calculator
Port: CalculatorSoap (Soap11Binding: {http://tempuri.org/}CalculatorSoap)
Operations:
Add(intA: xsd:int, intB: xsd:int) -> AddResult: xsd:int
Divide(intA: xsd:int, intB: xsd:int) -> DivideResult: xsd:int
Multiply(intA: xsd:int, intB: xsd:int) -> MultiplyResult: xsd:int
Subtract(intA: xsd:int, intB: xsd:int) -> SubtractResult: xsd:int
Port: CalculatorSoap12 (Soap12Binding: {http://tempuri.org/}CalculatorSoap12)
Operations:
Add(intA: xsd:int, intB: xsd:int) -> AddResult: xsd:int
Divide(intA: xsd:int, intB: xsd:int) -> DivideResult: xsd:int
Multiply(intA: xsd:int, intB: xsd:int) -> MultiplyResult: xsd:int
Subtract(intA: xsd:int, intB: xsd:int) -> SubtractResult: xsd:int
如果您在 WSDL 上运行命令时查看结果,您将看到“绑定”部分。这就是您获得价值的地方,该价值很可能是Soap11Binding
(大多数服务仅提供一种绑定,而本服务提供两种绑定,每个版本对应 SOAP 协议)。
For the http://my-endpoint.com/acceptance/
在文档中,您应该替换新的 SOAP 地址(即您现在要发送服务请求的新位置)。从你的例子来看,这应该是http://virtual-soap/something
, where something
是来自 WSDL 内的原始 SOAP 地址的原始路径(同样,由于我无权访问您的 WSDL,您应该查看地址的哪一部分需要替换,哪一部分保持不变)。
至于你想调用什么操作,那不会改变。你也用同样的方式称呼它。存在相同的方法,因为您不更改服务合同,您只需更改要将请求发送到的位置。