在spyne中覆盖WSDL端口(即绑定的URL)

时间:2013-05-20 21:43:08

标签: python spyne

Spyne似乎根据访问服务的方式在WSDL定义中设置端口。例如,如果我第一次(即重新启动后)访问http://domain.com/soap-api/处的服务,它将在WSDL中嵌入该URL。但是,如果我使用https://www.domain.com/soap-api/,它将使用该网址。下面是我的WSDL的一部分:

<wsdl:service name="QuestService">
  <wsdl:port name="Application" binding="tns:Application">
    <soap:address location="https://app.stage.domain.com/soap-api/quest/"/>
  </wsdl:port>
</wsdl:service>
<wsdl:portType name="Application">
  <wsdl:operation name="ReceiveLabReqStatus" parameterOrder="ReceiveLabReqStatus">
  ...

当我使用suds访问服务器时,suds似乎并不关心定义中的哪个URL以及我向suds提供的URL。但是,似乎其他客户端确实关心,如果他们没有使用正确的URL,则在URL不匹配时会抛出错误(至少我认为这是正在发生的事情)。

所以,我的问题是:Spyne是否有办法明确设置与服务相关联的URL?

1 个答案:

答案 0 :(得分:2)

是的,这可能是2.10.7及以上。我修复了与该用例相关的错误并更新了文档。假设您正在使用WsgiApplication系列传输,请按以下步骤操作:

wsgi_app = WsgiApplication(...)
wsgi_app.doc.wsdl11.build_interface_document("http://example.com")

请注意,TwistedWebResource传输略有不同:

resource = TwistedWebResource(...)
resource.http_transport.doc.wsdl11.build_interface_document("http://example.com")

指向文档相关部分的链接是:

http://spyne.io/docs/2.10/reference/server.html#module-spyne.server.wsgi http://spyne.io/docs/2.10/reference/server.html#module-spyne.server.twisted

让我知道它是如何为你工作的。