Web Services Gateway入门
Web Services Gateway入门
--Web 服务的代理
Chandra Venkatapathy(chandrav@us.ibm.com),市场经理,IBM
Simon
Holdsworth(Simon_Holdsworth@uk.ibm.com),开发小组领导人,IBM
2002 年 5 月
Web服务要做到可以被公司防火墙内外的应用程序和流程访问,其基础是如何将您企业网内部的服务公开给外部用户。本文着眼于这条途径所涉及的问题以及 IBM 的 Web Services Gateway 怎样解决这些问题。
介绍
Web
服务作为企业中有效的流程集成的一种机制在市场中被采用。在为您公司的网络创建 Web
服务的过程中,您可能发现需要将这些服务的范围扩大为超出防火墙的限制。您可以将您的服务提供给业务合作伙伴、客户,甚至是订户,并允许他们成为您业务流程中不可分割的部分。在您给他人提供对您的网络中的服务的访问权之前,无疑有很多业务问题要解决,而我们把重点放在这背后的技术问题上。
当您开始外化超出企业网范围的 Web 服务时,您将面临很多需要解决的问题。这些问题包括安全、可靠性、服务质量、通信兼容性等等。就通信兼容性问题(这属于本文的范畴)而言,您可能陷入到大量的技术问题之中,使用不同协议、操作系统平台、或者甚至用不同编程语言编写的网络软件需要满足彼此能够进行平等对话。
在这些通信兼容性问题之中,您需要考虑下面这些事宜:
将部署和调用分离:将服务的实际实现与另一个服务访问它的方法分离。这些包括:
入站请求:在防火墙内创建并部署 Web
服务。在不经历一些复杂的部署和编程问题的情况下,服务请求者将怎样从防火墙之外发出请求?
出站请求:与前一个条目类似;内部用户怎样访问受控环境中的外部服务?
流程抽象:怎样能够提供更高级的抽象来识别并链接到调用的服务实现?服务调用方法必须足够灵活以处理一些事件,比如经常在类似服务的外部提供者之间切换,而不需要更改应用程序。
灵活性:作为一个服务提供者,您需要有更改部署基础结构,而不用通知所有服务请求者的灵活性。比方说将 Web
服务部署在后来在操作期间将发生故障的机器中。在您的基础结构中需要一个流程将调用路由到另一个服务。
协议转换:为满足业务需求,企业可能在其网络中使用一种特定的消息传递基础结构。但是,您的合作伙伴和客户可能使用不同的协议来调用您的 Web
服务。您需要一种机制来协调不同的服务调用,从而与内部基础结构的需要匹配。
您可能发现,前面的问题涵盖了部署和操作模型。Web Services Gateway 技术旨在当外化您的 Web 服务时,解决前面这些问题。从商业的角度看,它增强了您的资源的重用性,因为您的合作伙伴、客户和订户都可以共享您内部的 Web 服务。
介绍 Web Services Gateway
Web Services
Gateway 是提供基于 WSDL 文档的可配置映射的运行时组件。它在任何可用的传输通道将任何用 WSDL
定义的服务映射成另一个服务。它通常部署在防火墙处,并能够访问内部服务。Web Services Gateway 提供了下面这些功能:
服务映射:Web Services Gateway 的主要功能是将现有的用 WSDL 定义的 Web 服务映射成 Gateway
提供给他人的新服务。这样 Gateway 担当代理的角色。外部服务被导入到 Gateway 中,使其作为代理服务可供企业内部使用。同样,内部服务被导入到
Gateway 中,使其作为代理服务可供外部使用。这些服务还在必要的地方被发布到相关的 UDDI 目录。
导出映射:内部服务可以被导出供外部调用。给定 WSDL 文件,Gateway 将生成一个可以被外部请求者共享的新的 WSDL 文件。请求者将使用
Gateway 作为服务端点。
导入服务:类似的,外部服务可以被导入并作为内部服务可用。这将帮助内部的服务请求者调用服务,服务好像在
Gateway 上运行。
转换:服务的请求可能源于一个协议,而通过使用转换功能可以用一些其它的协议调用服务。一个通过SOAP over JMS
调用的内部服务可能使用 SOAP over HTTP 来调用。
UDDI 发布和查找:Gateway 使与 UDDI
注册中心的操作更容易。当您使用 Gateway 映射一个供外部消费的服务时,您可以在 UDDI 注册中心发布所导出的 WSDL。当 Gateway
中的服务被修改过后,UDDI 注册中心要随最近的更新而更新。
安全和管理:提供 Web 服务请求的单点控制、访问和验证。
Web Services Gateway 怎样工作
Web Services
Gateway 配有很多传输通道。传输通道可以定义为 Web 服务调用的底层传输机制。这些通道向您提供可以使您的 Web 服务可用的传输选择。当您通过
Gateway 映射服务时,值得一提的是,您可以指定服务使用的一组传输通道、服务的 WSDL 位置以及 Gateway 处服务的名称。Web Services
Gateway 构建在 IBM 的 Web 服务调用框架(Web Services Invocation Framework(WSIF))基础上,WSIF 使
Gateway 能够将 Web 服务调用传递给任何用 WSDL 定义的 Web 服务,甚至那些用外部协议(比如 CORBA)的服务。
情景说明 1. 处理入站请求
我们假设您提供部署在您企业的防火墙内的
StockQuote 服务,并且您想要和您的合作伙伴和客户共享这个服务。
第 1 步. 创建 WSDL 文档
创建描述并调用您的 StockQuote
服务的 WSDL 文档。清单 1 展示了描述 StockQuote 服务的 WSDL 的样本。正如您看到的,soap address location
指向防火墙内的 myhost。
清单 1. StockQuote SOAP 服务 WSDL
<definitions targetNamespace=...>
<message
name="GetQuoteInput">
<part name="symbol"
type="xsd:string"/>
</message>
<message
name="GetQuoteOutput">
<part name="quote"
type="xsd:float"/>
</message>
<portType
name="StockquotePT">
<operation
name="getQuote">
<input
message="tns:GetQuoteInput"/>
<output
message="tns:GetQuoteOutput"/>
</operation>
</portType>
<binding name="SOAPBinding"
type="tns:StockquotePT">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation
name="getQuote">
<soap:operation
soapAction="http://example.com/GetTradePrice"/>
<input>
<soap:body
use="encoded"
namespace="urn:xmltoday-delayed-quotes"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body
use="encoded"
namespace="urn:xmltoday-delayed-quotes"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service
name="StockquoteService">
<documentation>Stock quote
service</documentation>
<port
name="SOAPPort"
binding="tns:SOAPBinding">
<soap:address location="http://myhost:8080/soap/servlet/rpcrouter"/>
</port>
</service>
</definitions>
第 2 步. 将 WSDL 文档导入到 Gateway
这只要求提供托管在
Gateway 的服务的名称,选择 SOAP/HTTP 传输通道,并指定 StockQuote WSDL 文件的位置。Gateway
将生成一个可以与您的合作伙伴共享的新的 WSDL 文件。这两个文件之间的主要区别是 Gateway 所生成的文件将把 Gateway 作为服务端点,并且将
binding 和 portType 分离成一个接口 WSDL 文件。清单 2 展示了恰当修改过的 Gateway 所生成的文件。
清单 2. Gateway StockQuote 服务实现
WSDL
<definitions targetNamespace=...>
<import
namespace="http://www.ibm.com/namespace/wsif/samples/stockquote"
location="http://gatewayhost:80/wsgw/ServiceInterface?name=StockQuote"/>
<service name="StockQuote">
<port
name="StockquotePTApacheSOAPBindingPort"
binding="interface:StockquotePTApacheSOAPBinding">
<soap:address location="http://gatewayhost:80/wsgwsoap1/soaprpcrouter"/>
</port>
</service>
</definitions>
第 3 步. 让防火墙外的请求者共享 WSDL
文档
这可以以下面三种方式中的一种完成:
请求 Gateway 将服务发布到 UDDI,在这种情况下,服务请求者可以通过使用 UDDI 查找获得服务。
使用从 Gateway 获得的 WSDL 副本。
访问所提供的从 Gateway 动态获得 WSDL 的 URL(请参阅清单
3)。
清单 3. Gateway Web 服务 URL
http://gatewayhost:gatewayport/wsgw/ServiceDefinition?name=gatewayservicename
第 4 步. 服务请求者向 Gateway 发送 SOAP 请求
服务请求者将向 Gateway 发送 SOAP 请求,Gateway 将调用防火墙内部的服务,如图 1 所示。
图 1. 经过 Gateway 的入站请求
情景说明 2.
处理出站请求:
除了您将 WSDL 文档从防火墙外的提供者导入到 Gateway(Gateway
生成将被内部服务请求者使用的新的 WSDL 文档)之外,它与前一个案例相同。图 2 展示了出站请求的流程。
图 2. 经过 Gateway 的出站请求
情景说明 3. 协议转换
我们来扩展情景说明 1。您内部的 StockQuote 服务对于 SOAP/JMS 是可用的,而您的客户和合作伙伴将通过 SOAP over HTTP 调用它。在这个案例中,您大体上按照和情景说明 1 相同的步骤执行。但是,在第 2 步中,您在 Gateway 中指定服务将通过 SOAP over HTTP 来访问。Gateway 将生成与您的合作伙伴共享的新的 WSDL。特别是,接口 WSDL 文件将包含 SOAP/HTTP 绑定,而不是原始的 SOAP/JMS 绑定。图 3 展示了被转换成 SOAP/JMS 调用的入站请求的流程。
图 3. 协议转换
情景说明 4. 对非 SOAP
服务的访问
这一次 StockQuote 服务作为 Java 对象实现,但是您希望使它对于使用 SOAP/HTTP
的客户机可用。在这个案例中,服务的 WSDL 与情景说明 1 中的 WSDL 相同,除了 WSDL 包含 Java 绑定之外,如清单 4 所示。
清单 4:StockQuote 服务的 Java
绑定
<definitions ...>
<binding name="JavaBinding"
type="tns:StockquotePT">
<java:binding/>
<format:typeMapping
encoding="Java" style="Java">
<format:typeMap typeName="xsd:string" formatType="java.lang.String"
/>
<format:typeMap typeName="xsd:float"
formatType="java.lang.Float" />
</format:typeMapping>
<operation
name="getQuote">
<java:operation
methodName="getQuote"/><input/><output/>
</operation>
</binding>
<service
name="StockquoteService">
<documentation>Stock
quote service</documentation>
<port
name="JavaPort" binding="tns:JavaBinding">
<java:address
className="services.stockquote.Stockquote"/>
</port>
</service>
</definitions>
当这个服务被部署到 Gateway,并且 SOAP/HTTP 传输通道被选中时,来自 Gateway 的 WSDL 包含 SOAP 绑定和当前服务可用的 SOAP/HTTP 端口。
最后,您可以在 http://www7b.boulder.ibm.com/wsdd/downloads/wsgw/wsgw.html 上得到 Web Services Gateway 预览技术,作为一种预览技术。
总结
随着 Web
服务部署的增加以及更频繁地在防火墙内部和外部被使用,公开这些应用程序以及流程的传统的非 Web 服务方法可能会导致维护和可靠性问题。Web Services
Gateway 灵活的抽象方法旨在为这些问题提供解决方案,并且鼓励更好地使用像应用程序和流程这样的资产。
参考资料
- 请通过单击文章顶部或底部的讨论参加关于本文的讨论论坛。
- 请下载 Web Services Gateway,然后试验 StockQuote 样本。
- 请下载 IBM UDDI WebSphere Registry,从而在专有设置中发布和共享您的服务。
- 请下载 alphaWorks 上的 WSIF 分发包,然后试验更容易的样本。这给您 WSIF
支持的不同调用风格的第一手示例及其超出特定于协议的客户机 API 的优点。
- 请学习 SOAP、WSDL 和
UDDI。
- 如果您以前没对 Web 服务编过程,Web Services ToolKit 是良好的起点。
- 请看一看 WSDL4J,一个可扩展的 WSDL 解析框架,WSIF 在此之上构建。
Chandra Venkatapathy 是 IBM Software Group 的 WebSphere Web 服务市场推广部门的市场经理。整个去年,他都在管理和推广 Web 服务技术和产品。当前,Chandra 正忙于用 Web 服务改进中间件和集成的业务。Chandra 持有 University of North Carolina 的 Kenan-Flagler Business School 颁发的 MBA 学位以及电子工程和计算机科学方面的硕士学位。您可以通过 chandrav@us.ibm.com 与 Chandra 联系。
Simon Holdsworth 是 IBMs Hursley,
UK Labs 的 WebSrvices Gateway 的开发小组领导人以及系统设计师。他以前在 IBM 的经验包括 MQSeries
Integrator、Component Broker、DSOM(在此期间他参与开发 OMG OTS 规范和 IBM 参考实现)和
CICS/ESA。他具有英国 Bristol University 颁发的数理逻辑和计算理论的理学硕士学位。您可以通过 Simon_Holdsworth@uk.ibm.com 与 Simon 联系。
- 1Web Services 及其技术(上)
- 2网络服务热火如潮 前景扑朔迷离
- 3出版社行业如何做好信息化建设的思考
- 4微软、IBM和BEA联合发表Web服务新标准
- 5中国特色生态文明建设的理论创新和实践
- 6协同办公系统整合了多层次的安全控制方案
- 7Sharing information through the Lotus Knowledge Discovery Sy
- 8如何帮助企业构建安全的协同办公系统?
- 9石家庄OA信息化与企业发展
- 10源天软件获2008年度中国IT服务创新奖
- 11固化组织知识
- 12炎黄盈动AWS石家庄OA信息化应用套件
- 13从Web Services中访问服务器变量
- 14石家庄OA信息化如何做到亲身实践
- 15OA办公系统的信息发布与管理门户介绍
- 16看APQC如何实施和考评石家庄OA信息化?(by AMT 石家庄OA信息化研究小组)
- 17使用WSDL部署Web服务,第2部分:简单对象访问协议(SOAP)
- 18我国商贸业将迎来新一轮的IT建设高潮
- 19关于知识的问题
- 20透视Best Buy石家庄OA信息化实践(by AMT 夏敬华 编译)
- 21技巧:通过Web Service让Delphi/Visual Basic程序访问EJB
- 22EIP 相关资源
- 23BEA与OASIS协作 加强Web Services安全
- 242008协同软件冰火之年:概念褪去 普及延伸
- 25泛普协同OA办公软件的信息资源共享
- 26泛普软件石家庄OA信息化系统集成方案
- 27W3C加速语义网和Web服务方案开发
- 28泛普软件石家庄OA信息化系统实施9大推进步骤
- 29Managing Knowledge Workers
- 30全球性学习型组织的十一个特征
成都公司:成都市成华区建设南路160号1层9号
重庆公司:重庆市江北区红旗河沟华创商务大厦18楼