快速业务通道

提高J2EE技术和.NET之间的互操作性,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
一个 Person 类型的友元,并且不能有其它类型和属性。然而,序列化的 SOAP 响应消息( 清单 3)当然不符合这个规则。响应消息中的 href 没有在定义中出现。对于这个问题,怎样告诉接收者元素 A 和 B 是 Person 类的实例呢?

事实上,如果您编写一个 .NET 客户来与这个 Web 服务交互, .NET 客户将不能够正确地逆序列化 清单 3 所示的 WebSphere 响应。.NET 客户期望的描述 John 和 Jason 是友元的响应消息如下所示:

清单 5:来自 .NET 的 SOAP 编码响应消息<soap:Body soap:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"><tns:makeFriendsResponse>    <makeFriendsResult href="http://j5c.ddvip.com/index.php#id1" /> </tns:makeFriendsResponse> <types:Person id="id1" xsi:type="types:Person">    <name xsi:type="xsd:string">John</name>    <friend href="http://j5c.ddvip.com/index.php#id2" /> </types:Person> <types:Person id="id2" xsi:type="types:Person">    <name xsi:type="xsd:string">Jason</name>    <friend href="http://j5c.ddvip.com/index.php#id1" /> </types:Person></soap:Body>

正如您看到的,多引用访问器编码是很强大的,但是它很难在 XSD 中表达。因此在不同的平台之间的实现有些细微的不同,如 清单 3 和 清单 5 所示。示例说明了 SOAP 编码和 XML 脚本校验之间的不同。Document/literal 通过文本文档来传递信息并基于 XML 脚本来校验和逆序列化对象的 XML 表示。不同于 Document/literal , RPC/encoded 模型使用 SOAP 编码规则来表述抽象 SOAP 数据模型,并依赖厂商的 SOAP 库来提供抽象数据模型的具体实现。它是高度平台独立的。它不需要中间的规范来填补空白,因此,这种方式对于不同厂商的实现是开放的。尽管 SOAP 是标准,由于缺少 XML 脚本支持,SOAP 实现(如 Application Developer V4 和 V5 的基于 DOM 的 Apache SOAP 库和基于 SAX 的 Apache AXIS 库、MS .NET 1.1 框架的 MS SOAP 工具包 )还是有细微不同。

利用 WS-I 一致性测试工具检测一致性

WS-I 基本规范为遵守 Web 服务规范来构建互操作的 Web 服务提供了指导。WS-I 工作组开发了 WS-I 一致性测试工具来帮助开发人员判断它们的 Web 服务是否遵循规范指南。WS-I 测试工具分析器可以产生一个规范一致性报告来记录您的 WSDL 文档的一致性声明。目前,测试工具的 C# 和 Java 版本都可以下载。通过运行测试工具,WS-I 基本规范 1.0 的大部分明显的冲突都会被报告。清单 4 中的 WSDL 文档的一致性检查测试的冲突如 清单 6 中所示。

清单 6. 从 WS-I 测试工具获取的失败报告Result: failed Failure Message: The use attribute of a soapbind:body, soapbind:fault, soapbind:header and soapbind:headerfault does not have value of "literal". Failure Detail Message: SOAPBody ({http://schemas.xmlsoap.org/wsdl/soap/}body): required=null use=encoded encodingStyles=[http://schemas.xmlsoap.org/soap/encoding/] namespaceURI=http://cyclic.test Element Location:   lineNumber=87

失败消息是自我解释的: soapbind:body、 soapbind:fault、 soapbind:header 或 soapbind:headerfault 中的 "use=encoded" 被认为是不遵守 WS-I 规范的。您应该使用 "use=literal" 来代替。由于毫无疑问要使用 Document/encoded,也就是说,您不应该使用 RPC/encod

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号