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


78

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

Answers:



40

在WSDL中,如果查看“绑定”部分,您将清楚地看到,如果服务使用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服务使用的肥皂版本。可以使用以下方式之一确定肥皂消息的版本。

1.检查肥皂消息的名称空间

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:上下文类型的用户text / xml

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

SOAP 1.2:用于上下文类型的用户application / 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错误消息的结构不同。


18
答案的第一部分可能会使用一些其他信息-“ soap12”是名称空间前缀,而不是名称空间本身。您需要检查“ soap12”前缀解析为什么以及指定的soap版本。有人可以使用soap12作为前缀,但指向soap11名称空间URI。
csadler '16

谢谢,这是如此有用。
vikingsteve

1
@csadler的注释非常重要,但是即使在此处,也无法提供正确的名称空间值。这个给你。soap引用1.1的前缀是http://schemas.xmlsoap.org/wsdl/soap/soap12指向1.2的前缀是http://schemas.xmlsoap.org/wsdl/soap12/。无论前缀名称是什么(可以是偶数foobar),只要看看它解析的名称空间即可。
Wiktor Zychla


4

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

看一下演示Web服务WSDL。它具有对soap12命名空间的引用,表明它支持SOAP 1.2。如果不存在,那么假设该服务仅支持SOAP 1.1,您可能会很安全。


soap12名称空间参考是一个很好的指示。但是,如果缺少它,它仍然可以是SOAP 1.2 Web服务-en.wikipedia.org/wiki/Web_Services_Description_Language上的示例WSDL没有此引用,但也许它包含SOAP 1.2典型的其他内容?
mjn

2

在binding-element中发现传输属性,这告诉我们这是SOAP 1.1 HTTP绑定的WSDL 1.1绑定。

例如

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.