Python 使用没有返回消息的Spyne定义SOAP客户端
我开始使用Spyne实现一个web服务。到目前为止,生成的WSDL对于消费客户机(机器客户机和人工客户机)来说都很好 唯一的问题是,他们(人类客户机)定义了一个协议,在该协议中,通过web服务来回发送的消息不需要返回值(如果您感到好奇,这是因为该协议依赖于相反方向的异步调用,在某些任务完成后提供返回反馈) 因此,他们要求我从WSDL定义中删除相关的返回Python 使用没有返回消息的Spyne定义SOAP客户端,python,soap,wsdl,spyne,Python,Soap,Wsdl,Spyne,我开始使用Spyne实现一个web服务。到目前为止,生成的WSDL对于消费客户机(机器客户机和人工客户机)来说都很好 唯一的问题是,他们(人类客户机)定义了一个协议,在该协议中,通过web服务来回发送的消息不需要返回值(如果您感到好奇,这是因为该协议依赖于相反方向的异步调用,在某些任务完成后提供返回反馈) 因此,他们要求我从WSDL定义中删除相关的返回消息。但我似乎找不到办法 class BusinessTransactionLogSend(ServiceBase): __service
消息
。但我似乎找不到办法
class BusinessTransactionLogSend(ServiceBase):
__service_name__ = "BusinessTransactionLogSend"
__namespace__ = "tns"
__port_types__ = ['IBusinessTransactionLogSend']
@rpc(TransactionLog, _body_style="wrapped",
_in_variable_names={'parameters': 'Log'},
_args=['Log'],
_port_type="IBusinessTransactionLogSend",
_returns=None,
_out_message_name='LogResponse')
def Log(ctx, parameters):
time.sleep(1)
这是服务和RPC日志。我已经尝试过放置\u returns=None
,但是WSDL仍然有
<wsdl:types>
<xs:schema targetNamespace="https://www.zz/" elementFormDefault="qualified">
<xs:import namespace="tns"/>
<xs:complexType name="LogResponse"/>
<xs:complexType name="Log">
...
...
<wsdl:message name="LogResponse">
<wsdl:part name="LogResponse" element="tns:LogResponse"/>
</wsdl:message>
...
<wsdl:portType name="IBusinessTransactionLogSend">
<wsdl:operation name="Log" parameterOrder="Log">
<wsdl:input name="Log" message="tns:Log"/>
<wsdl:output name="LogResponse" message="tns:LogResponse"/>
</wsdl:operation>
</wsdl:portType>
...
...
...
...
...
他们的SOAP/WSDL解析器被这条LogResponse
消息弄糊涂了。
是否有任何方法可以跳过此操作或指示Spyne不为无效返回值生成类型和消息
我可以编写一个过滤器(或者称之为事件侦听器),它看起来像是环顾四周,但是
我还没有找到一个完整的例子,也没有一个好的文档
在我看来,让Spyne做家务比我好
当然,我可以试着告诉我的客户忽略WSDL中的任何xxxResponse
消息,但我担心他们糟糕的基于SAP的客户仍然会抱怨
谢谢
我发现了一个还没有被记录下来的东西,它只解决了部分问题:我们可以用
@rpc(TransactionLog, _body_style="wrapped",
_in_variable_names={'parameters': 'Log'},
_is_async=True, #<====================== THIS ======
_args=['Log'],
_port_type="IBusinessTransactionLogSend",
_returns=None
)
现在是什么
<wsdl:portType name="IBusinessTransactionLogSend">
<wsdl:operation name="Log" parameterOrder="Log">
<wsdl:input name="Log" message="tns:Log"/>
</wsdl:operation>
</wsdl:portType>
但是消息和ComplexTypeLogResponse
仍然存在于WSDL中,即使没有人会使用它
<wsdl:portType name="IBusinessTransactionLogSend">
<wsdl:operation name="Log" parameterOrder="Log">
<wsdl:input name="Log" message="tns:Log"/>
</wsdl:operation>
</wsdl:portType>