2009-04-10 128 views

回答

40

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),那麼這非常有用,在這種情況下,您不需要創建新服務,只需要改進原來的服務即可。

+1

MTOM可以與soap1.1一起使用 – GregD 2015-03-04 10:02:32

4

是的,你通常可以看到基於WSDL支持SOAP版本。

看看Demo web service WSDL。它具有對soap12名稱空間的引用,表明它支持SOAP 1.2。如果沒有,那麼假設該服務僅支持SOAP 1.1,則可能是安全的。

+0

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

2

找到binding-element中的transport-attribute,它告訴我們這是SOAP 1.1 HTTP綁定的WSDL 1.1綁定。

ex。

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
18

在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錯誤消息的結構不同。

+5

答案的第一部分可以使用一些附加信息 - 「soap12」是命名空間前綴,而不是命名空間本身。您需要檢查「soap12」前綴所解析的內容以及指定的soap版本。有人可以使用soap12作爲前綴,但指向soap11名稱空間URI。 – csadler 2016-05-12 14:37:35

相關問題