soap 协议学习

来源:互联网 发布:如何讲好中国故事知乎 编辑:程序博客网 时间:2024/06/06 11:04

1 soap与http关系

http:是一个客户端和服务器端请求和应答的标准(TCP)。http协议其目的是为了提供一种发布和接收htttp页面的方法

一http协议的客户端与服务器的交互:由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

 

soap 协议:它描述了一种在分散或分布式的环境中如何交换信息的轻量级协议。soap在http协议的基础上,一个基于XML的协议。

不同:都是底层的通信协议,请求包的格式不同而已,soap包是XML格式,http纯文本格式。

 

关系:SOAP是个通信协议, SOAP在HTTP协议的基础上,把编写成XML的REQUEST参数, 放在HTTP BODY上提交个WEB SERVICE服务器(SERVLET,ASP什么的) 处理完成后,结果也写成XML作为RESPONSE送回用户端, 为了使用户端和WEB SERVICE可以相互对应,可以使用WSDL作为这种通信方式的描述文件,利用WSDL工具可以自动生成WS和用户端的框架文件,SOAP具备把复杂对象序列化捆绑到XML里去的能力。

2  RPC与Document

JWS既支持RPC绑定样式也支持Document绑定样式,同时Document绑定样式为默认值。   

(1)下面是RPC样式的一些优点:

由于有类型定义,自动生成的WSDL文档非常精简。

WSDL文档中的消息可以直接反映出对应的基础Web服务操作的名称,也就是在基于Java语言的Web服务中@WebMethods所注解的方法。因此从WSDL文档中人们可以直接获取服务操作的名称。

由于不需要承载更多类型及编码信息,消息的传输往往是高效的。

下面是RPC样式的一些缺点:

由于WSDL中没有类型定义部分,因此不能够提供XSD文档来校验SOAP消息体。

同样由于没有XSD来定义数据类型,服务能够使用的数据类型有限。因此服务只是局限于一些相对简单的类型,比如整数、字符串、日期、数组等。

RPC样式对请求/响应消息的模式捆绑,使得服务与客户端之间耦合性增加。相对异步调用方式而言,RPC样式下服务调用通常是同步的。

 

(2)下面是Document样式的一些优点:

可以利用WSDL文档类型部分的XSD文档直接来验证SOAP消息体。

XML模式语言除了支持整数、字符串及日期等这些简单数据类型之外,还支持任意复杂的类型,因此这种样式的Web服务所使用的数据类型不受限制。

只要在XSD中定义了明确的数据结构,如何构建SOAP消息体具有很大的灵活性。

包装行为吸取了RPC样式的一个重要优点,即RPC样式中SOAP消息体可以直接通过与之关联的服务操作名称来命名,同时又摒弃了RPC样式的不足之处。

下面是Document样式的不足之处:

在非包装版本中,SOAP消息中没有提供服务操作的名称,一些特定的程序代码在分发消息时可能会变得复杂。

包装版本使得服务调用的复杂度有所增加,尤其是在API级别。就像前面的AmazonClientW例子一样,针对程序开发人员来说,基于包装的Document绑定样式的服务编写客户端代码也许就变成了一项极具挑战性的工作。

在SOAP消息体的XML包装元素中必须拥有一个服务操作的名称,因此包装版本不支持重载的服务操作。实际上,针对一个既定的元素名称也只能够有一个服务操作。

同时,这篇博文http://blog.csdn.net/tomholmes7/article/details/2773738 总结的更详尽些

 

3 编码

请见《WSDL绑定样式各种组合优劣势比较》http://blog.csdn.net/sfdev/article/details/2540703

      《发现 SOAP 编码对 Web 服务性能的影响》http://www.ibm.com/developerworks/cn/webservices/ws-soapenc/#figure1

 

 


 

 

 

 

 

参考自http://www.cnblogs.com/Ilin631/archive/2011/05/25/2056820.html

           http://book.51cto.com/art/200911/163673.htm

          

           

原创粉丝点击