深蓝海域KMPRO

Web Services Gateway入门

2002-08-26 09:46

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 的优点。
  • 请学习 SOAPWSDLUDDI
  • 如果您以前没对 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 联系。

相关推荐