论坛首页 Java企业应用论坛

摘转:发现 SOAP 编码对 Web 服务性能的影响

浏览 7616 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-31  
SOA
今天在搜索资料,无意中找到这个三种方法的比较,还不错,摘一些主要的如下:

发现 SOAP 编码对 Web 服务性能的影响,通过改变编码样式从根本上提高性能

http://www-128.ibm.com/developerworks/cn/webservices/ws-soapenc/
  • SOAP 远程过程调用(Remote Procedure Call,RPC)编码,也称为 Section 5 编码,它由 SOAP 1.1 规范定义
  • SOAP 远程过程调用文字编码(SOAP RPC-literal),它使用 RPC 方法进行调用但使用 XML 自制的方法编入数据
  • SOAP 文档样式(document-style)编码,也称为 消息样式(message-style)文档文字(document-literal)编码。

SOAP RPC
这种编码样式是最简便的。您对远程对象进行调用,并传递任意必需的参数。SOAP 堆栈将这些参数序列化为 XML,再使用传输协议(如 HTTP 和 SMTP)将这些数据传送到目的地,然后接收响应,并将接收到的响应反序列化为对象,然后将结果返回到调用方法。唷!SOAP RPC 处理了所有的编码和解码工作(即使对于非常复杂的数据类型也是如此)并自动绑定到远程对象。

SOAP RPC 也允许通过文字编码将这些 XML 数据转换为单个字段,然后将这些字段序列化并发送到 Web 服务主机。这就是 RPC-literal编码所指的内容。由于只有一个参数 - 即 XML 树 - 所以 SOAP 堆栈只需要对一个值进行序列化。SOAP 堆栈仍然处理传输问题以将请求传送到远程对象。堆栈将请求绑定到远程对象并处理响应。

SOAP 文档样式调用中,SOAP 堆栈将整个 XML 文档发送到服务器,甚至不需要一个返回值。消息可以包含任何种类的对于远程服务适合的 XML 数据。在 SOAP 文档样式编码中,开发人员要处理每一件事,包括确定传输协议(如 HTTP、MQ 或 SMTP)、编入和编出 SOAP 信封体以及对请求和响应中的 XML 进行解析以找到所需的数据。

三种编码系统的比较

SOAP RPC 编码对于软件开发人员来说是最简单的;但是所有这些容易都是以牺牲可扩展性和性能为代价的。在 SOAP RPC-literal 编码中,您需要更多地对 XML 解析进行处理,但是这种编码样式对于 SOAP 堆栈来说需要处理开销。SOAP 文档文字编码对于软件开发人员是最难的了,但因此需要很少的 SOAP 开销。

为什么 SOAP RPC 会简单一些呢?使用这种编码样式,您只需要在代码中定义公共对象方法一次;SOAP 堆栈将请求参数编出到对象中并将这些参数直接传送到您的对象的方法调用中。否则,您必须完成在向公共方法进行调用之前遍历 XML 树进行解析以查找需要的元素这一任务。

对于您自己对 XML 数据进行解析这一点有一个论点:既然您最了解 XML 树中的数据,那么您的代码对那些数据进行解析要比通用的 SOAP 堆栈代码效率高。在衡量使用各个 SOAP 编码样式的可扩展性和性能的时候您会发现这一点。

   发表时间:2006-12-31  
相关资源的下载

TestMaker:http://www.pushtotest.com/Downloads/features.html

SOAKit:http://downloads.pushtotest.com/beakit/SOAKit.zip

SOAP Encoding Performance Kit:http://downloads.pushtotest.com/SOAP_Encoding_Kit.zip

The Performance Kit:http://downloads.pushtotest.com/PerfKit.zip

Knowledge Kit:http://downloads.pushtotest.com/KnowledgeKit.zip
0 请登录后投票
   发表时间:2007-01-04  

这个就是让用户自己完成数据绑定工作,document/literal也可以吧。 Axis2里的RawXML方式的Web服务开发就是这样的。RPC方式现在已经狠不流行了吧,好像Axis2是先支持document 格式,然后又提供了一个把RPC消息转换到Document方式的工具来支持RPC的? RPC Encoded里的类型信息感觉就是多余的。

觉得意义不大,应该尽量简化用户的工作不是?


YuLimin 写道:

今天在搜索资料,无意中找到这个三种方法的比较,还不错,摘一些主要的如下:

发现 SOAP 编码对 Web 服务性能的影响,通过改变编码样式从根本上提高性能

http://www-128.ibm.com/developerworks/cn/webservices/ws-soapenc/
  • SOAP 远程过程调用(Remote Procedure Call,RPC)编码,也称为 Section 5 编码,它由 SOAP 1.1 规范定义
  • SOAP 远程过程调用文字编码(SOAP RPC-literal),它使用 RPC 方法进行调用但使用 XML 自制的方法编入数据
  • SOAP 文档样式(document-style)编码,也称为 消息样式(message-style)文档文字(document-literal)编码。

SOAP RPC
这种编码样式是最简便的。您对远程对象进行调用,并传递任意必需的参数。SOAP 堆栈将这些参数序列化为 XML,再使用传输协议(如 HTTP 和 SMTP)将这些数据传送到目的地,然后接收响应,并将接收到的响应反序列化为对象,然后将结果返回到调用方法。唷!SOAP RPC 处理了所有的编码和解码工作(即使对于非常复杂的数据类型也是如此)并自动绑定到远程对象。

SOAP RPC 也允许通过文字编码将这些 XML 数据转换为单个字段,然后将这些字段序列化并发送到 Web 服务主机。这就是 RPC-literal编码所指的内容。由于只有一个参数 - 即 XML 树 - 所以 SOAP 堆栈只需要对一个值进行序列化。SOAP 堆栈仍然处理传输问题以将请求传送到远程对象。堆栈将请求绑定到远程对象并处理响应。

SOAP 文档样式调用中,SOAP 堆栈将整个 XML 文档发送到服务器,甚至不需要一个返回值。消息可以包含任何种类的对于远程服务适合的 XML 数据。在 SOAP 文档样式编码中,开发人员要处理每一件事,包括确定传输协议(如 HTTP、MQ 或 SMTP)、编入和编出 SOAP 信封体以及对请求和响应中的 XML 进行解析以找到所需的数据。

三种编码系统的比较

SOAP RPC 编码对于软件开发人员来说是最简单的;但是所有这些容易都是以牺牲可扩展性和性能为代价的。在 SOAP RPC-literal 编码中,您需要更多地对 XML 解析进行处理,但是这种编码样式对于 SOAP 堆栈来说需要处理开销。SOAP 文档文字编码对于软件开发人员是最难的了,但因此需要很少的 SOAP 开销。

为什么 SOAP RPC 会简单一些呢?使用这种编码样式,您只需要在代码中定义公共对象方法一次;SOAP 堆栈将请求参数编出到对象中并将这些参数直接传送到您的对象的方法调用中。否则,您必须完成在向公共方法进行调用之前遍历 XML 树进行解析以查找需要的元素这一任务。

对于您自己对 XML 数据进行解析这一点有一个论点:既然您最了解 XML 树中的数据,那么您的代码对那些数据进行解析要比通用的 SOAP 堆栈代码效率高。在衡量使用各个 SOAP 编码样式的可扩展性和性能的时候您会发现这一点。





0 请登录后投票
   发表时间:2007-01-05  
在没有Web Service toolkit的时候,我就用过SOAP 文档样式调用,用C++构建项目专有的XML分析和SOAP信封,速度当然快多了。


Generic是要用性能来作为代价的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics