问题描述
我开始使用Spyne实施Web服务。到目前为止,生成的WSDL对使用方的客户端(机器客户端和人工客户端)来说都是不错的。
唯一的是,他们(人类客户)定义了一个协议,该协议中通过网络服务来回发送的消息不希望返回值(如果您很好奇,那是因为该协议依赖于相反的异步调用在完成某些任务后给出返回反馈的方向。
所以他们要我从WSDL定义中删除相关的回报Message
。但是我似乎找不到办法。
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 Log
。我试过放_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>
...
此LogResponse
消息混淆了他们的SOAP / WSDL解析器。
有什么方法可以跳过此操作或指示Spyne不要为无效的返回值生成Type和Message?
我可以编写一个过滤器(或者可能将其称为事件的侦听器),它看起来似乎是从周围看的,但是
- 我还没有找到完整的示例,也没有很好的文档
- 在我看来,告诉Spyne做家务比我好
我当然可以尝试告诉我的客户忽略WSDL中的任何xxxResponse
消息,但是我担心他们糟糕的基于SAP的客户仍然会抱怨
谢谢 W
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)