是否可以根据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同时,以限定下皂1.1和1.2肥皂操作。如果您需要发展您的wsdl以支持需要soap 1.2的新功能(例如MTOM),那么这非常有用,在这种情况下,您不需要创建新服务,只需要改进原来的服务即可。
是的,你通常可以看到基于WSDL支持SOAP版本。
看看Demo web service WSDL。它具有对soap12名称空间的引用,表明它支持SOAP 1.2。如果没有,那么假设该服务仅支持SOAP 1.1,则可能是安全的。
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
我已经找到了这个网页
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
它说,SOAP 1.2采用新的命名空间http://schemas.xmlsoap.org/wsdl/soap12/
这是在 'WSDL 1.1绑定扩展为SOAP 1.1'。
找到binding-element中的transport-attribute,它告诉我们这是SOAP 1.1 HTTP绑定的WSDL 1.1绑定。
ex。
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
在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错误消息的结构不同。
答案的第一部分可以使用一些附加信息 - “soap12”是命名空间前缀,而不是命名空间本身。您需要检查“soap12”前缀所解析的内容以及指定的soap版本。有人可以使用soap12作为前缀,但指向soap11名称空间URI。 – csadler 2016-05-12 14:37:35
- 1. wsimport在SOAP 1.1中使用SOAP 1.2 wsdl
- 2. 使用soap 1.2的WCF生成带有soap 1.1的wsdl参考
- 3. WCF SOAP 1.2期待SOAP 1.1内容类型的服务
- 4. 我可以使用SOAP 1.1下载WSDL文档吗?
- 5. 可以在没有WSDL的情况下使用SOAP Web服务吗?
- 6. 我们可以在soap服务的wsdl url中有空白吗?
- 7. 我可以在Heroku上公开或发布SOAP Web服务吗?
- 8. Web服务中的WSDL SOAP异常
- 9. php中的Perfect Soap(Wsdl)web服务
- 10. WSDL Soap Web服务与android的集成
- 11. iOS中的WSDL SOAP web服务集成
- 12. web服务中的SOAP和WSDL
- 13. Web服务(WSDL SOAP)的空响应
- 14. SOAP :: Lite - 在mod_perl中使用版本1.1和1.2的客户端
- 15. SOAP/WSDL Web服务和Python现在
- 16. Android Web服务,REST还是SOAP WSDL?
- 17. WSDL SOAP Web服务在IPhone应用
- 18. 如何连接到SOAP/WSDL Web服务?
- 19. Java 1.3 Websphere 5应用程序 - >需要调用SOAP 1.1或SOAP 1.2 Web服务
- 20. 通过相同的JAX-WS服务支持SOAP 1.1和1.2
- 21. 如何将用于SOAP 1.1的WSDL文件转换为支持SOAP 1.2
- 22. WCF/WSDL服务版本
- 23. pysimplesoap无法确定WSDL中的服务:SOAP版本:soap11
- 24. 可以使用WSDL 2.0(或类似的)来生成Web服务样板吗?
- 25. .NET在生成Web服务时可以保留WSDL吗?
- 26. 从Java中的参数化类生成Web服务(WSDL 1.2或更高版本)(Apache CXF,Axis 2)
- 27. JDO可以与SOAP服务交谈吗?
- 28. Zend Soap服务器/ WSDL
- 29. Java SOAP WSDL服务NoClassDefFoundError
- 30. 我可以使用OAuth进行SOAP Web服务吗?
MTOM可以与soap1.1一起使用 – GregD 2015-03-04 10:02:32