【IT168 技术文档】
引言
在本系列的第 2 部分中,我讨论了可以如何实现原始应用程序 Web 服务的业务流程并确定系统可以承载的可互操作 SOA 的最大个数,以避免 SOA 过载。在本系列的第 5 部分中,我强调了将业务流程规则作为优化 Web 服务的首要事项的重要性,并给出了一些示例,以说明可以如何减少 Web 请求的数量和执行时间。
在这一部分中,我将讨论基于 XML 的 Web 服务应用程序是如何变得过于庞大的。当大量使用 Web 服务时,这些 Web 服务将阻塞网络通信,从而导致系统过载。为了解决此问题,我将讨论可以如何应用 XML 二进制优化打包 (XOP) 规范(请参阅参考资料)来加速 Web 服务。
此标准草案旨在比当前 XML 解析器更有效地处理 Web 服务。解析器的行为更像解释器,而不是编译器。当解析器读写大型文件(特别是文本格式的大型文件)时,并不能达到其读取较小的文件或计算简单函数时的性能。甚至加密也可能使 Web 服务陷于停顿,因为必须执行复杂的计算才能获得希望的结果。
两个场景
我在第 2 部分中提到,从企业应用程序提取组件,然后将其重新构造为外部 Web 服务,这种做法更为恰当。如果这样,您就可以更改 Web 服务中的代码,而不用重新设计并编译长时间运行的大型复杂应用程序。
第一个 SOA 中经过重新设计而显得更加紧凑的应用程序(请参见图 1)可以通过发送 Web 请求来与第二个 SOA 中的外部企业 MRP(托管资源原型)Web 服务进行动态链接。而 MRP Web 服务又指向第三个 SOA 中的外部企业 CRM Web 服务。客户关系管理 (CRM) Web 服务随后将请求和信息发送到该应用程序以进行进一步处理。 
图 1:动态链接到 Web 服务
让我们假定在任何给定时间都可能出现对多个基于 XML 的 Web 服务的多个 Web 请求。链接到其他遗留系统或大型企业系统的企业应用程序未在上图中显示,而这些系统又与接收多个 Web 请求的多个 Web 服务链接。当大量使用时,Web 服务会变得过于庞大,从而阻塞网络通信。
一个解决方案就是向基于 XML 的 MRP 和 CRM Web 服务应用 XOP 包(请参见图 2),从而以二进制格式进行处理。 
图 2: 将 XOP 包应用于 Web 服务
在第二个场景中,可以首先开发业务流程规则,然后开发根据现有 Web 服务构建新的 Web 服务所需的基于 XML 的 Web 请求。如果新的 Web 服务(业务逻辑 Web 服务或以数据为中心的 Web 服务)可以提供更好的或额外的服务和功能,则必须减少或完全消除冗余的 Web 请求、执行时间、访问时间和带宽。
问题在于,当创建新的 Web 服务并大量使用时,它们将会变得过于庞大。与第一个场景类似,您需要将 XOP 包应用于 Web 服务。对于这两个场景,您都需要与系统管理员协作,以确定在不引起系统过载的情况下可以使用 XOP 包的 Web 服务的最大数目。
XOP 处理前的 Infoset
为了理解 XOP 的工作方式,我将首先讨论一个与 SOAP 消息相似的 XML Infoset,其中描述了包含一张图片和一个签名的 XML 文档。在清单 1 中,我使用粗体来突出显示原始 XML Infoset,以说明哪些原始元素在 XOP 处理之前。
清单 : XOP 处理前的 XML Infoset
<soap:Envelope
xmlns:soap='http://www.w3.org/2003/05/soap-envelope'
xmlns:xop='http://www.w3.org/2003/12/xop/include'
xmlns:xmlmime='http://www.w3.org/2004/06/xmlmime'>
<soap:Body>
<m:data xmlns:m='http://example.org/stuff'>
![]()
<m:photo xmlmime:content-type='image/png'>
/aWKKapGGyQ=
</m:photo>
<m:sig xmlmime:content-type='application/pkcs7-signature'>
Faa7vROi2VQ=
</m:sig>`
![]()
</m:data>
</soap:Body>
</soap:Envelope>
正如您所看到的,其中有两个元素:m:photo 和 m:sig。m:photo 元素采用 base64 编码的内容为 /aWKKapGGyQ=,而 m:sig 元素采用 base64 编码的内容为 Faa7vROi2VQ=。这些元素也称为元素信息项。内容是元素的子项。请将该元素当作此子项的父项。子项是字符信息项,即包含字母数字字符的项。例如,m: photo 是子项 /aWKKapGGyQ= 的父项。该子项的名称不便阅读且难于发音,很容易出现键入错误。
当通过 XOP 处理放置 XML Infoset 时,可以解决此问题。XOP 的工作方式是:从原始 Infoset 提取优化内容,然后创建 XOP Infoset。优化内容是我刚刚谈到的经过缩减的内容。在清单 2 中,我突出显示了要删除的内容。
清单 2: 要删除的内容
<m:photo xmlmime:content-type='image/png'>
/aWKKapGGyQ=
</m:photo>
<m:sig xmlmime:content-type='application/pkcs7-signature'>`
Faa7vROi2VQ=
</m:sig>