是否可以根據WSDL中的信息來查看Web服務是否使用SOAP 1.1或1.2?WSDL可以指示Web服務的SOAP版本(1.1或1.2)嗎?
回答
SOAP 1.1使用命名空間http://schemas.xmlsoap.org/wsdl/soap/
SOAP 1.2使用命名空間http://schemas.xmlsoap.org/wsdl/soap12/
的WSDL是能夠在相同的wsdl同時,以限定下皁1.1和1.2肥皂操作。如果您需要發展您的wsdl以支持需要soap 1.2的新功能(例如MTOM),那麼這非常有用,在這種情況下,您不需要創建新服務,只需要改進原來的服務即可。
是的,你通常可以看到基於WSDL支持SOAP版本。
看看Demo web service WSDL。它具有對soap12名稱空間的引用,表明它支持SOAP 1.2。如果沒有,那麼假設該服務僅支持SOAP 1.1,則可能是安全的。
soap12命名空間參考是一個很好的指標。但是如果它丟失了,它仍然可以是一個SOAP 1.2 Web服務 - http://en.wikipedia.org/wiki/Web_Services_Description_Language中的示例WSDL沒有這個引用,但它可能包含其他一些典型的SOAP 1.2? – mjn 2009-04-10 06:41:08
我已經找到了這個網頁
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
它說,SOAP 1.2採用新的命名空間http://schemas.xmlsoap.org/wsdl/soap12/
這是在 'WSDL 1.1綁定擴展爲SOAP 1.1'。
找到binding-element中的transport-attribute,它告訴我們這是SOAP 1.1 HTTP綁定的WSDL 1.1綁定。
ex。
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
在WSDL中,如果您查看綁定部分,您將清楚地看到,如果服務使用soap 1.2,則會明確提到肥皂綁定。請參閱下面的示例。
<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="findEmployeeById">
<soap12:operation soapAction=""/>
<input><soap12:body use="literal"/></input>
<output><soap12:body use="literal"/></output>
</operation><operation name="create">
<soap12:operation soapAction=""/>
<input><soap12:body use="literal"/></input>
<output><soap12:body use="literal"/></output>
</operation>
</binding>
如果Web服務使用soap 1.1,它不會在綁定部分下顯式定義WSDL文件中的任何soap版本。請參閱下面的示例。
<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="findEmployeeById">
<soap:operation soapAction=""/>
<input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
<output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation><operation name="create">
<soap:operation soapAction=""/>
<input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
<output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation>
</binding>
如何確定SOAP消息的SOAP版本?
但請記住,這不是推薦的方式來確定您的Web服務使用的肥皂版本。肥皂消息的版本可以使用以下方法之一來確定。
1.檢查SOAP消息
SOAP 1.1 namespace : http://schemas.xmlsoap.org/soap/envelope
SOAP 1.2 namespace : http://www.w3.org/2003/05/soap-envelope
2.檢查SOAP消息
SOAP 1的傳輸綁定信息(HTTP頭信息)的命名空間。1:用戶文本/ XML的上下文類型
POST /MyService HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
SOAP 1.2:使用用戶應用程序/肥皂+ xml的用於上下文類型
POST /MyService HTTP/1.1
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
3. SOAP故障信息
兩個版本之間的SOAP錯誤消息的結構不同。
答案的第一部分可以使用一些附加信息 - 「soap12」是命名空間前綴,而不是命名空間本身。您需要檢查「soap12」前綴所解析的內容以及指定的soap版本。有人可以使用soap12作爲前綴,但指向soap11名稱空間URI。 – csadler 2016-05-12 14:37:35
- 1. wsimport在SOAP 1.1中使用SOAP 1.2 wsdl
- 2. 使用soap 1.2的WCF生成帶有soap 1.1的wsdl參考
- 3. WCF SOAP 1.2期待SOAP 1.1內容類型的服務
- 4. 我可以使用SOAP 1.1下載WSDL文檔嗎?
- 5. 可以在沒有WSDL的情況下使用SOAP Web服務嗎?
- 6. 我們可以在soap服務的wsdl url中有空白嗎?
- 7. 我可以在Heroku上公開或發佈SOAP Web服務嗎?
- 8. Web服務中的WSDL SOAP異常
- 9. php中的Perfect Soap(Wsdl)web服務
- 10. WSDL Soap Web服務與android的集成
- 11. iOS中的WSDL SOAP web服務集成
- 12. web服務中的SOAP和WSDL
- 13. Web服務(WSDL SOAP)的空響應
- 14. SOAP :: Lite - 在mod_perl中使用版本1.1和1.2的客戶端
- 15. SOAP/WSDL Web服務和Python現在
- 16. Android Web服務,REST還是SOAP WSDL?
- 17. WSDL SOAP Web服務在IPhone應用
- 18. 如何連接到SOAP/WSDL Web服務?
- 19. Java 1.3 Websphere 5應用程序 - >需要調用SOAP 1.1或SOAP 1.2 Web服務
- 20. 通過相同的JAX-WS服務支持SOAP 1.1和1.2
- 21. 如何將用於SOAP 1.1的WSDL文件轉換爲支持SOAP 1.2
- 22. WCF/WSDL服務版本
- 23. pysimplesoap無法確定WSDL中的服務:SOAP版本:soap11
- 24. 可以使用WSDL 2.0(或類似的)來生成Web服務樣板嗎?
- 25. .NET在生成Web服務時可以保留WSDL嗎?
- 26. 從Java中的參數化類生成Web服務(WSDL 1.2或更高版本)(Apache CXF,Axis 2)
- 27. JDO可以與SOAP服務交談嗎?
- 28. Zend Soap服務器/ WSDL
- 29. Java SOAP WSDL服務NoClassDefFoundError
- 30. 我可以使用OAuth進行SOAP Web服務嗎?
MTOM可以與soap1.1一起使用 – GregD 2015-03-04 10:02:32