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中同时在soap 1.1和soap 1.2下定义操作。 如果您需要发展您的wsdl以支持需要soap 1.2的新function(例如MTOM),那么这非常有用,在这种情况下,您不需要创build新的服务,只需要改进原来的服务即可。

在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.检查肥皂消息的传输绑定信息(http头信息)

SOAP 1.1:用于上下文types的用户文本/ xml

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

SOAP 1.2:用于上下文types的用户应用程序/ 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错误消息的结构是不同的。

我find了这个页面

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

其中说Soap 1.2使用新的命名空间http://schemas.xmlsoap.org/wsdl/soap12/

它在“SOAP 1.1的WSDL 1.1绑定扩展”中。

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

看看演示Web服务WSDL 。 它具有对soap12名称空间的引用,表明它支持SOAP 1.2。 如果没有,那么假设该服务仅支持SOAP 1.1,则可能是安全的。

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

恩。

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