【IT168 技术文档】
引言
在关于企业级面向服务的体系结构 (SOA) 系列我的第一篇文章,“使用多重 SOA 来消除企业系统之间的差异”(参阅参考资料)中,通过说明如何重用一个或多个 SOA 中的 Web 服务(以数据为中心 (data-centric) 和业务逻辑),然后将他们联合到一个受组织控制的组合应用程序中,讨论了使用 SOA 缩小企业系统差异的方案。
当 Web 服务不受组织所控制时,需要确保它们在外部可以彼此互操作,来共享语义和契约职责。语义的误解(例如所有权)和契约漏洞(例如多平台间的区别)会影响外部企业 Web 服务之间的互操作性问题。
在本文中,我展示了四个实现制造资源规划 (Manufacturing Resource Planning,MRP) 和客户关系管理 (Customer Relationship Management,CRM) 服务的实例,如下所示:
1.企业以前的应用程序
2.到外部 Web 服务的动态链接
3.请求外部 Web 服务的 REpresentational State Transfer/Simple Object Access Protocol (REST/SOAP) 共存
4.使用 IBM® WebSphere® Application Server 和 Microsoft® Visual Studio .Net 的 Web 服务互操作性
考虑各种交易时,确定系统可以负载的可互操作的 SOA 的数量非常重要,这样可以避免 SOA 过载。
企业以前的应用程序
假设企业以前的应用程序(参见图 1)被分成业务流程的模块化组件。该应用程序的两个重要组件(MRP 和 CRM)要求不断发生变化且重新编译长期运行的应用程序。 
图 1:企业以前的应用程序
动态服务链接
为增加运行效率,从应用程序中提取出这些组件并将其重新构建为外部 Web 服务更有意义。通过这种方式,您可以更改两个 Web 服务的代码,而不用重新编译庞大的、复杂的长期运行的应用程序。
在第一个 SOA(参见图 2)中以更加紧凑的形式重新设计的应用程序可以动态链接到第二个 SOA 中的外部企业 MRP Web 服务,依次的,指向第三个 SOA 中的外部企业 CRM Web 服务。一旦收到请求,CRM Web 服务将请求和信息发送给应用程序来进行进一步处理。 
图 2.:到 Web 服务的动态链接
每个链接机制都是以发送请求或消息,接收响应,或执行 SQL 或 HTTP 操作的形式出现的。还可以封装没有 MRP 组件的应用程序,这样就可以向 MRP Web 服务发送请求。
软件架构
需要牢记,在从一个协议转换到另一个,或者从一个软件架构转换到另一个时,可能会引起平台间的互操作性问题。一些实例包括 SOAP、REST、.Net 架构、企业 Java Bean (Enterprise Java Beans,EJB) 以及 Java 消息服务 (Java Messaging Service,JMS)。
运行在 HTTP 上的 .Net Web 服务可以以三种不同的方式调用:HTTP GET 操作、HTTP POST 操作和 SOAP。如果需要快速的调用 Web 服务且没有 SOAP 客户端的话,GET 和 POST 操作都是非常有用的。可以通过 Perl 脚本在 HTTP 上使用 REST 来执行 GET、POST、PUT 和 DELETE 操作。在这个脚本中,您可以指定 SQL 查询和简单的消息队列。
如果 SOAP 客户端可用,下面是如何在 REST 和 SOAP 之间进行简单的选择。如果应用程序是 基于资源的,选择 REST。如果应用程序是 基于行为的,选择 SOAP。在 REST 中,客户端可以通过 HTTP 请求执行在一系列资源上的多个操作。对于基于 SOAP 的请求,可能需要执行请求的每个面向活动的客户端可能仅需要一个调用操作。
调用框架
要构建 SOAP 请求,需要使用 Web 服务描述语言 (Web Services Description Language,WSDL),这是一种描述如何访问 Web 服务以及将执行什么操作的语言。您可以指定服务的类型,而不用自定义 Web 服务的代码,也不用重新编译以前的应用程序。
为确保 WSDL 文件能在各种软件架构中工作,您可以利用 IBM Web Services Invocation Framework (WSIF),它让您可以将 WSDL 作为不同软件标准来描述。这表明您可以通过描述语言周围的 API 以独立于协议和位置的方式访问 WSDL。还意味着您可以通过 WSDL 将 Web 服 务结合复合成应用程序,在 WSDL 中您可以在各种条件和异常情况下切换协议和位置。
为构建 WSIF,无论您打算使用什么提供商,您都需要满足最低需求,该选项包括如下:
1.JAXP XML 解析器
2.Java API 的 WSDL
3.Apache SOAP
4.Apache Axis。