APP下载

基于WS-BPEL的物流信息系统设计与实现

2013-02-06黄川林陈伟卫大连东软信息学院辽宁大连116023

物流科技 2013年4期
关键词:请求者服务提供者调用

黄川林, 程 勖, 陈伟卫 (大连东软信息学院,辽宁 大连 116023)

随着经济全球化的迅速发展,现代物流信息系统的作用日益突出,它已经被越来越多的企业作为自己赶超世界潮流的标志之一。然而现有的物流信息系统基本都采用面向对象设计,造成系统在体系结构、数据标准和接口等各方面的不一致。因此,现代物流技术中急需解决的问题是如何有效地整合异构的物流信息系统,从而实现物流相关信息系统的信息互通,提高物流运作效率和降低物流成本。

WS-BPEL(Web Services Business Process Execution Language)是一种业务流程的建模语言,基于一系列的开放技术标准[1]。利用WS-BPEL作为描述企业的物流信息系统Web服务组合的语言,可以管理和优化物流中的各企业各部门之间的异构资源,实现基于面向服务的体系架构的物流信息系统的集成。

1 基于SOA的系统架构

目前物流信息系统主要存在以下问题:

(1)由于实现技术和系统结构的不同,导致系统间交互复杂;

(2)数据流向混乱、流程繁多;

(3)结构复杂,使得业务需求不易改变。

针对目前物流信息系统存在的问题,在对现有系统的有效集成基础上,利用Web Services封装原有需要开放出来的功能,从而使各系统都具有统一的接口标准,并通过引入SOA架构,不但能够实现各系统间的信息交互,还能使之成为既相互独立,又协调统一的整体,构建出如图1所示的物流信息系统架构。在此架构中还搭建了一个公共信息交换平台,该平台是为实现系统集成和各个系统之问的数据共享,提供有效地决策支持数据,需要建立基于数据管理和利用的综合性技术方案的共享数据中心,用以存放大量数据的同时有效地将数据管理起来,提供数据访问的手段,为集成系统和各个子系统之间的数据共享提供平台,保证数据的及时性、完整性和一致性[2]。

2 面向Web服务技术

Web服务体系结构描述了服务请求者、服务提供者和UDDI服务注册中心三个角色以及查找、发布和绑定与发现这三种操作[3]。服务提供者通过客户端发布代理在服务注册中心 (通常采用UDDI)注册配置和发布服务;服务请求者需要使用某个Web服务时,根据服务信息使用客户端查找代理在服务注册中心查找所需的服务,注册中心返回服务的接口描述文档 (WSDL);服务请求者根据获取的服务接口描述文档通过SOAP协议绑定服务提供者并调用提供者所提供的服务。

图1 基于SOA的物流信息系统架构

系统把服务代理的角色引入SOA模型,从而实现对SOA模型的扩展。该模型除了服务提供者、服务请求者和UDDI服务注册中心三个基本角色外,还包括一个特殊的角色——服务代理。服务代理处于服务提供者和服务请求者之间,起到中介作用,所有已知并且可用的Web Services都将映射到服务代理上[4]。服务代理将根据自己功能的需要对Web Services的属性进行扩展,从而达到提高Web Services检索效率的目的。

3 基于服务代理的BPEL流程框架

以扩展的SOA模型为依据,建立基于服务代理的BPEL流程框架,如图2所示。对于BPEL流程的一般节点来说,在流程定义时已经为其指定了用于实现的Web Services,当路由到该节点时就可以直接调用该Web Services;而对于BPEL流程中需要动态调用Web Services的节点来说,它们要先发送调用Web Services的请求到服务代理,由服务代理根据请求为该节点在多个Web Services中择优选择并分配一个Web Services,从而实现BPEL流程动态地调用 Web Services。

基于服务代理的BPEL流程框架最大的优点在于:结构简单,易于实现。首先,该框架可以视为是对SOA的扩展,由于服务代理本身就是一个Web服务,这样BPEL流程与服务代理之间的关联通过简单的BPEL编码就可以实现。

4 Web服务代理的实现

Web服务代理的实现主要是对服务的动态调用和流程的调用接口的实现。下面主要对这两方面进行描述。

(1)Web服务动态调用的实现

实现BPEL流程对Web服务动态调用分两个阶段:首先,服务选择器根据Web服务的功能择优选择一个Web服务;最后,通过一定方法调用该Web服务,并将执行结果反馈给BPEL流程。

Web服务的优化选择算法的策略不是唯一的,这些策略可以有:成本最低、响应时间最快、可靠性最好等单一规则,另外根据QoS计算模型所得到的综合测评结果也可以作为Web服务选择的策略。将Web服务的类型和选择策略作为函数的输入,优化选择算法的伪代码描述如下。

public String service Optimization(String class,String rule)

{

switch rule

case Duration

//选择响应时间短的Web服务

case Price

//选择服务价格最低的Web服务

case QoS

//选择服务质量综合测评最好的

return服务地址

图2 基于服务代理的BPEL流程框架

}

实现对Web服务的调用根据上一阶段获取的Web服务URL,可以获取该Web服务的描述WSDL,WSDL中包含一些对Web服务参数的描述,利用.Net的反射Reflection技术,将远程Web服务在本地进行实例化。按照Reflection的描述,首先定义代理类,根据WSDL中的内容设置代理类的编译参数,编译代理类,生成代理实例,并使用被Web服务的方法,最后返回结果,该过程如图3所示。

图3 Web服务本地实例化的过程

下面是将实现Web服务远程调用算法的描述。

public static object invokeWebService(url,arg[])

{

//获取 WSDL

webClient wc=new webClient();

stream str=wc.OpenRead(url+“?WSDL”);

//从str中截取服务描述信息ServiceDescription

//生成代理类代码

CodeCompileUnit ccu=new CodeCompileUnit();

ccu.Namespaces.Add(cn);

sdi.Import(cn,ccu);

CSharpCodeProvider icc=new CSharpCodeProvider();

//设定编译参数

CompilerParameters cplist=new CompilerParameters();

//为 cplist对象添加 GenerateExecutable、GenerateInMemory

Cplist.ReferencedAssemblies.Add(“System.dll”);

Cplist.ReferencedAssemblies.Add(“System.XML.dll”);

Cplist.ReferencedAssemblies.Add(“System.Web.Services.dll”);

Cplist.ReferencedAssemblies.Add(“System.Data.dll”);

//编译代理类

CompilerResults cr=icc.CompileAssemblyFromDom(cplist,ccu);

//生成代理实例,并调用方法

System.Reflection.Assembly assembly=cr.CompiledAssembly;

Type t=assembly.GetType(@namespace+"."+classname,true,true

object obj=Activator.CreateInstance(t);

System.Reflection.MethodInfo mi=t.GetMethod(methodname);

//返回结果

return mi.Invoke(obj,args);

(2)BPEL流程的调用接口实现

BPEL流程本身也是以Web服务的形式向外提供调用接口的,下面是对BPEL流程接口的WSDL定义。

<wsdl:definitions name=“process”...>

<!--端口类型定义-->

<portType name=“process”>

<operation name=“callAgent”>

<input message=“inputMessage”/>

<output message=“outputMessage”/>

</operation>

</portType>

<!--合作伙伴链接类型定义-->

<plnk:partnerLinkType name=“agent”>

<plnk:role name=“agentService”>

<plnk:portType name=“tns:agent”

</plnk:role>

</plnk:partnerLinkType>

</wsdl:definitions>

该WSDL定义声明了callAgent操作,其输入和输出消息的定义类似于服务代理中操作消息的定义,此不赘述。为了描述BPEL流程和服务代理的交互关系,需要预先在BPEL流程接口的描述中定义合作关系的类型,由于BPEL流程和服务代理之间的属于同步调用关系,只需定义服务代理的端口和角色。

5 结束语

本文通过采用SOA重构技术,利用以Web Services为基础的WS-BPEL技术解决了目前物流相关企业的信息系统架构各异,实现的技术众多,无法采用传统的架构模式对现有的系统进行有效集成,从而导致物流资源信息缺乏有效共享等问题,最终实现了基于面向服务的体系架构的物流信息系统的集成。

[1] 李文娟.基于WS-BPEL的Web服务组合执行引擎的设计与实现[D].西安:西北大学 (硕士学位论文),2009.

[2] 王念念,傅秀芬,吕占德.基于SOA的物流信息系统的研究与设计[J].计算机技术与发展,2011,21(12):213-216.

[3] 刘树军.基于WebService的应用集成关键技术研究[D].银川:宁夏大学 (硕士学位论文),2011.

[4] 赵广建,申利民,刘波,等.BPEL流程动态调用Web服务的实现方法[J].计算机工程与设计,2010,31(11):2952-2954.

猜你喜欢

请求者服务提供者调用
基于D2D 多播通信的合作内容下载机制
网络服务提供者的侵权责任研究
群智感知中基于云辅助的隐私信息保护机制
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
论网络服务提供者刑事责任的归责模式一一以拒不履行网络安全管理义务罪为切入点
汉语自然会话中请求行为的序列结构
论网络服务提供者的侵权责任
基于差值诱导的Web服务评价可信度的评估
基于系统调用的恶意软件检测技术研究