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?
答案 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
让我知道它是如何为你工作的。