2013-05-20 56 views
3

似乎Spyne根據服務的訪問方式在WSDL定義中設置端口。例如,如果我第一次(即重新啓動後)訪問服務http://domain.com/soap-api/,它會將該URL嵌入到WSDL中。但是,如果我使用https://www.domain.com/soap-api/,它將使用該URL。下面是我的WSDL的一個片段:忽略spyne中的WSDL端口(即綁定的URL)

<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"> 
    ... 

當我用肥皂水來訪問服務器,泡沫似乎並不關心哪個URL是在定義和URL我喂肥皂水。然而,看起來其他客戶端很在意,如果他們沒有使用正確的URL,當URL不匹配時(至少我認爲這就是發生的事情)會引發錯誤。

所以,我的問題:Spyne中是否有一種方法可以明確設置與該服務關聯的URL?

回答

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

讓我知道它是如何爲你解決的。

+0

謝謝Burak!像魅力一樣工作。 – Josh