【问题标题】:How can I stop Spyne from wrapping arguments in a complexType?如何阻止 Spyne 将参数包装在 complexType 中?
【发布时间】:2013-03-13 20:16:16
【问题描述】:

我正在尝试使用 Spyne 从 Python 提供 Web 服务。我已经为一个名为 SayHello(name, times) 的测试函数工作了一切。但是,我想知道为什么 Spyne 将 name 和 times 参数包装在一个名为 SayHello 的 complexType 中?这使得在 .NET 中使用 Web 服务更加笨拙(即,我必须使用 appClient.SayHello("Dave", 5) 而不是 SayHello args = new SayHello(); args.name = "Dave"; args.times = "5"; appClient.SayHello(args);,这非常不雅)。

有没有办法强制 Spyne 不将参数包装在 complexType 中?

这是 Spyne 生成的当前 wsdl 的相关部分:

<xs:schema targetNamespace="solutions.sfcs" elementFormDefault="qualified">
  <xs:complexType name="SayHello">
    <xs:sequence>
      <xs:element name="name" type="xs:string" minOccurs="0" nillable="true"/>
      <xs:element name="times" type="xs:integer" minOccurs="0" nillable="true"/>
    </xs:sequence>
  </xs:complexType>

【问题讨论】:

    标签: c# python soap spyne


    【解决方案1】:

    您可以将_body_style='bare' 传递给@rpc 装饰器以防止包装。但你很可能会得到:

    Exception: body_style='bare' can handle at most one function argument.
    

    如果您能以不破坏其他测试的方式解决此问题,我可以合并您的补丁。

    【讨论】:

    • 如果你能以不破坏其他测试的方式解决这个问题,我会给你这个 50 分的赏金:)
    • 在相关说明中,我想知道它是否与实施相反的文档有关?评论decorators.py中的rpc方法说soap_body_style=rpc->body_style = bare,但实现其实是soap_body_style=rpc->body_style = wrapped
    • 不幸的是,仅仅改变它似乎并不能解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2021-10-14
    • 2022-10-07
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多