如何在Spyne srpc方法中访问SOAP头?

时间:2013-09-04 16:43:07

标签: soap spyne

请原谅我,如果我只是很厚,但Spyne documentation on headers似乎有点薄,并且示例代码的链接被破坏了。我想我找到了示例代码here,但它似乎只能访问侦听器回调函数中的标头。如果可能的话,我需要在srpc方法中访问它。

我想做的是这样的事情(这不起作用):

class MyRequest(ComplexModel):
    Messages = Array(Unicode)

class MyHeader(ComplexModel):
    TrackingID = ByteArray

class MySoapService(ServiceBase):
    @srpc(MyRequest, _in_header=MyHeader)
    def PostMessages(req, hdr):
        logging.info(u'RECEIVED: {0:s}'.format(hdr.TrackingID))

如果有帮助,我试图替换用.NET编写的服务,它只是在消息合同中定义消息头,如下所示:

[MessageContract]
public class MyRequest
{
  [MessageHeader]
  public Guid TrackingID { get; set; }

  [MessageBodyMember]
  public String[] Messages { get; set; }
}

1 个答案:

答案 0 :(得分:0)

您无法从srpc函数中读取标题数据。 @srpc适用于您不想触摸的现有功能。除非您知道需要@srpc

,否则应始终使用@rpc

使用@rpc装饰你的功能。这会将rpc上下文(通常命名为ctx)作为函数的第一个参数传递。然后,在ctx.in_header中找到标题数据。您还可以设置ctx.out_header来更改传出响应标头。

另外,拉取文档请求对我来说是纯粹的金币:)