Web服务内幕,第3部分:Apache和Microsoft -- 良好的合作
Web服务内幕,第3部分:Apache和Microsoft --
良好的合作
-- SOAP 互操作性就将来临
James Snell (
软件工程师,Emerging Technologies,IBM
2001 年 5 月
在“Web 服务内幕”的这个部分中,James Snell 通过演示使用
Microsoft SOAP 工具包 Beta 2 获得 Apache 基于 SOAP 的 Web 服务是如此的轻松,表明 Apache 和 Microsoft
可以很好地合作。
Web
服务的概念终于开始为人们所接受。但当您尝试着去实现它时,重要的是不要忘记,无论是开发平台还是编程语言,无缝跨平台互操作性是这项技术的推动力。如果您不把互操作性的问题确定下来,各种
SOAP 和 Web 服务实现都将在进行信息传递的时候遇到故障。Web 服务则会成为又一个失败的试验。
IBM、Microsoft 和
Apache
许多人可能都知道,去年春天 IBM 和 Microsoft 都发行了实现 SOAP 的第一批版本。(后来 IBM
把它的代码给了 Apache,启动了现在的 Apache SOAP 项目计划。)但是,尽管市场上所有有关 SOAP
的著作都承诺其平台互操作性,但工具却并不能提供这一点。在 SOAP 实现方式中有很多错误和细微差别,使得两种工具间几乎不能传递信息。但情况正开始改变。由于
Apache SOAP 项目和 Microsoft
两方面成员所作的一致努力,互操作性已成为一个中心议题。很多最初的问题已经消失,遗留的少数不兼容问题也正被快速而顺利地解决。
请注意:为了试验这里的两个示例,您需要下载最新版 Apache SOAP (2.1 版) 和 Microsoft SOAP 工具包 (Beta 2 或以上)。请参阅参考资料。
互操作性 -- xsi:type
属性的问题
如果阅读过 developerWorks 上其他讨论 Web
服务体系结构的文章,那么您一定很熟悉以下的示意图及其代表的含义。(如您没有阅读过这些文章,我强烈建议您上图书馆看一看。)
图 1: Web 服务体系结构的基本组件
图 1 代表 Web 服务体系结构的三个基本组件所执行的三个基本操作:
服务提供者通过在服务代理者那里注册来配置和发布服务;
服务请求者通过查找服务代理者那里的被发布服务登记记录来找到服务;
服务请求者绑定服务提供者并使用可用的服务。
在
Web 服务的世界里,三个操作都包含三个受到称赞的、和截然不同的技术:
发布的服务使用“通用描述、发现和集成(UDDI) API”;
查找服务使用 UDDI 和 Web
服务描述语言的组合(WSDL);
绑定服务处理 WSDL 和简单对象访问协议(SOAP)。
从最基础的层次上来看,绑定操作是三者中最重要的。它包含服务的实际使用,这也是发生大多数互操作性问题的地方。简单地说,是服务提供者和服务请求者对
SOAP 规范的全力支持解决了这些问题,并实现了无缝互操作性。
不幸的是,这个简单的解决方案听起来容易实现,但实际上却难得多。SOAP 的许多可选组件形成的灵活性、及其固有的综合单一性使得我们在尝试实现它时会受到挫折。举个例子,Microsoft 和 Apache SOAP 工具包间产生的 xsi:type 属性冲突是个恼人的小问题,它可以导致一段时间内工具间互操作性的完全中断。
不要忘记,根据 SOAP 规范,一个信封中包含的各个元素可能选择性地使用 xsi:type 属性来识别其包含的数据类型。如果服务提供者和请求者有一些其它方式来传递此信息,则它不必被包含在信封中。 xsi:type 只有当无其它方式传递这些数据类型时,才应使用这个属性。
为了解决这一问题,Microsoft 建立了一个外部服务描述文档的相关性,它描述了数据类型,且能被服务提供者和请求者访问。Apache 要求任何时候都要包含 xsi:type 属性。
这两种方法都是“合法 SOAP”(尽管 Apache 采取的实现方法被认为更合法和更固定一些),但是它们彼此不兼容。附带补充一句,Apache SOAP 没有而且是依然没有理解 Microsoft 采用的服务描述语言。这种语言已有过三次反复。首先是“服务描述语言”或 SDL,其次是“服务合同语言”或 SCL,再次是现在的 “Web 服务描述语言”或 WSDL。
同时 Microsoft 也没有包含任何机制能方便地把 xsi:type 属性添加到工具生成的 SOAP 信封上。不过好在情况已有所改变。Microsoft 现在有一个新的十分灵活的 SOAP 实现方式,它包含对 SOAP 信封更好的支持和更低级别的控制。而 Apache 也已解除需要存在 xsi:type 属性的限制。这样,两个工具间就能互相自由传递信息了。
一个扩展的股票行情服务,版本 1
我们这里的示例将为免费的 NASDAQ
InfoQuotes 服务创建一个基于 SOAP 的界面,请参阅 http://quotes.nasdaq.com。这个简单的服务通过 HTTP-GET 请求,以
HTML 或 XML 格式提供扩展的股票行情服务。所有这个项目的 Java 和 XML 源文件在参考资料部分。图 2 的屏幕截图显示行情服务返回的 XML
数据。
图 2:Nasdaq 行情的 XML 数据的屏幕截图
在 NasdaqQuotes Web 服务的版一上,我们将使用一个简单的 Java 类,它表达了一个单独
getQuotes 方法;将 HTTP-GET 请求的 XML 输出作为一个字符串返回,如清单 1 的代码片段所示。
配置这个 Web 服务
要将这个 Java 类配置成一个 Web
服务,应该编译它并确定它在您的 Java Web 服务器的类的路径上(假设您已安装和配置了 Apache SOAP 2.1)。以下几步将告诉您如何从
Microsoft SOAP 上配置和调用服务。
步骤 1. 创建一个 Apache 配置描述符。Apache SOAP Service Manager 利用配置描述符(一个简单的 XML 文档)收集有关已配置服务的信息。请参阅清单 2 中的 NasdaqQuotes 服务版本 1.0 的配置描述符。
清单 2: 一个 XML 配置描述符
methods="getQuote">
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>
Apache SOAP 文档中有 XML 配置描述符的详细结构说明。但是请注意我们例子中的
步骤 2. 一旦已创建配置描述符,您得用它将 NasdaqQuotes 服务配置在服务的注册记录中。通过执行此命令行可以完成配置。
这里 http://acme.com/soap/servlet/rpcrouter 对应您的 SOAP RPC Router Servlet 安装。NasdaqQuotes 服务完成配置,并可以使用了。您可以通过调用本文附带的 zip 包中所提供的基于 java 的客户端来测试此服务。请参阅 readme.txt 的指导。
步骤 3. Microsoft 工具需要使用一个 WSDL 文档,它描述服务的界面和位置。既然 Apache SOAP 不包含对 WSDL 的任何支持,您就有两种选择:用 IBM 的 alphaWorks 的 WSDL 工具包来为指定的 Java 类生成 WSDL,或者自己编写 WSDL 文件。我建议您手写 WSDL (请参阅清单 3 ) -- 把东西写出来会让您对 WSDL 的结构和功能有更好的感觉。如果您需要出色的 XML 编辑器,我大力推荐商用的 XML-Spy 产品,但是其他编辑器也能用。
在编辑完 NasdaqQuotes.wsdl 文件后,该使用 Microsoft 工具了。在这篇文章所带的 zip 包中,您会发现 samp1e 目录里有两个名为 nq.vbs 和 vq.bat 的文件。 nq.vbs (请参阅清单 4 )文件包含使用 Microsoft SOAP 工具包调用 NasdaqQuotes 服务的代码,脚本有 43 行代码,但实际 SOAP 调用的发生只有前六行(它们中的四行由初始化基本变量的代码组成)。您看,Microsoft 下了很大功夫使人们方便地使用他们的工具。
清单 4: 针对 Microsoft SOAP 工具包的 nq.vbs
Set SC = CreateObject("MSSOAP.SoapClient")
SC.mssoapinit
"D:ServicesNasdaqQuotesClient.wsdl", "", "", ""
Res =
SC.getQuote(WScript.Arguments(0))
通过执行 nq.bat 文件,您可调用 NasdaqQuotes 服务,把您要查询的代号作为一个命令行参数来传入(请参阅图 3)。
图 3: 从命令行运行 NasdaqQuotes
家庭作业: NasdaqQuotes 版本 2
NasdaqQuotes
服务版本 1.0 非常简洁地显示了 Microsoft 和 Apache
有能力互相进行便捷的信息传递。但是行情服务返回的信息是以字符串的形式返回的,这意味着还需更多努力来改善服务。例如:我们可能要求 SOAP 信封实体以 XML
形式来返回查询结果,而不是以返回字符串的形式。在 zip 下载包中的 NasdaqQuotes2 Service
示例能让您采取正确的步骤。您的家庭作业是仔细研究这个例子里的内容。和平常一样,如您有任何问题,请告诉我,看看我是否能帮助您。
参考资料
请点击文章顶部或底部的讨论,参与有关这篇文章的讨论论坛。
针对本文中的项目的 Java 和 XML 源代码在这个 zip 文件中。
请下载最新版的 Apache SOAP。
请下载最新版的 Microsoft SOAP 工具包。
请查看 SOAP 参考资料的 cetus-links 索引。
如同 Web 服务资源中心和开发顾问,Lemur Labs 也有一个附带参考资料的 SOAP 信息页面 。
Soaprpc.com专门提供有关 SOAP 信息的参考资料,SoapWare.org 和 SOAPClient.com 同样如此。
关于作者
浏览:Web服务内幕,第1部分
Web服务内幕,第2部分
Web服务内幕,第4部分
Web服务内幕,第5部分
Web服务内幕,第6部分
Web服务内幕,第7部分
Web服务内幕,第8部分
Web服务内幕,第9部分
Web服务内幕,第10部分
- 1微软、PwC和纳斯达克联合推出财报Web服务
- 2BRINT e-Business(by AMT整理)
- 3技巧:通过Web Service让Delphi/Visual Basic程序访问EJB
- 4石家庄OA信息化调研问卷
- 5Accessing Server Variables From Within Web Services
- 6中国特色生态文明建设的理论创新和实践
- 7OA软件其他辅助管理与车辆管理介绍
- 8bindingTemplate与Web服务调用
- 9知识地图在项目型组织中的应用
- 10Web服务内幕,第10部分:深入主题:可靠性和事务
- 11第五项修炼简要目录
- 12网络服务热火如潮 前景扑朔迷离
- 13石家庄OA信息化方面的站点资源!
- 14无SOAP的Web服务,第二部分
- 15无SOAP的Web服务,第一部分
- 16Web服务内幕,第7部分:WSFL和递归组合
- 17微软展示新版互联网服务MSN 8.0
- 18微软为创建和使用Web服务另辟蹊径
- 19XML Web Services Security
- 20A Web Services Primer
- 21InterOP Stack新一代平台互操作技术:InterOP Stack技术应用前瞻
- 22加速战略学习
- 23Favorites Service Overview
- 24IBM WebSphere以最快速度部署开放的Web服务
- 25在ASP程序中调用Web Service
- 26Web Service初探
- 27石家庄泛普OA软件管理门户登录
- 28面向21世纪的知识发展战略
- 29泛普软件石家庄OA信息化系统实施9大推进步骤
- 30《变革之舞-学习型组织持续发展面临的挑战》
成都公司:成都市成华区建设南路160号1层9号
重庆公司:重庆市江北区红旗河沟华创商务大厦18楼