WSDL可以指示Web服务的SOAP版本(1.1或1.2)吗?

时间:2009-04-10 06:02:19

标签: web-services soap wsdl

是否可以根据WSDL中的信息查看Web服务是否使用SOAP 1.1或1.2?

5 个答案:

答案 0 :(得分:57)

SOAP 1.1使用名称空间http://schemas.xmlsoap.org/wsdl/soap/

SOAP 1.2使用名称空间http://schemas.xmlsoap.org/wsdl/soap12/

wsdl能够在同一个wsdl中同时在soap 1.1和soap 1.2下定义操作。如果你需要改进你的wsdl以支持需要soap 1.2(例如MTOM)的新功能,那就很有用了,在这种情况下你不需要创建一个新服务但只是改进原来的服务。

答案 1 :(得分:30)

在WSDL中,如果你看一下 Binding 部分,你会清楚地看到如果服务使用soap 1.2,就会明确提到soap绑定。参考以下样本。

<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服务使用的soap版本的方法。可以使用以下方法之一确定soap消息的版本。

<强> 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消息的传输绑定信息(http标头信息)

SOAP 1.1:Context-Type

的用户text / xml
   POST /MyService HTTP/1.1
   Content-Type: text/xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

SOAP 1.2:Context-Type

的用户应用程序/ soap + xml
   POST /MyService HTTP/1.1
   Content-Type: application/soap+xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

第3。使用SOAP故障信息

两个版本之间的SOAP错误消息的结构是不同的。

答案 2 :(得分:13)

我找到了这个页面

http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm

表示Soap 1.2使用新的命名空间http://schemas.xmlsoap.org/wsdl/soap12/

它位于'SOAP 1.1的WSDL 1.1绑定扩展中'。

答案 3 :(得分:4)

是的,您通常可以根据WSDL查看支持的SOAP版本。

看看Demo web service WSDL。它引用了soap12名称空间,表明它支持SOAP 1.2。如果没有,那么假设该服务仅支持SOAP 1.1,您可能会安全。

答案 4 :(得分:2)

在binding-element中找到transport-attribute,它告诉我们这是SOAP 1.1 HTTP绑定的WSDL 1.1绑定。

离。

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