是否可以根据WSDL中的信息查看Web服务是否使用SOAP 1.1或1.2?
答案 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"/>