黃川林, 程 勖, 陳偉衛 (大連東軟信息學院,遼寧 大連 116023)
隨著經濟全球化的迅速發展,現代物流信息系統的作用日益突出,它已經被越來越多的企業作為自己趕超世界潮流的標志之一。然而現有的物流信息系統基本都采用面向對象設計,造成系統在體系結構、數據標準和接口等各方面的不一致。因此,現代物流技術中急需解決的問題是如何有效地整合異構的物流信息系統,從而實現物流相關信息系統的信息互通,提高物流運作效率和降低物流成本。
WS-BPEL(Web Services Business Process Execution Language)是一種業務流程的建模語言,基于一系列的開放技術標準[1]。利用WS-BPEL作為描述企業的物流信息系統Web服務組合的語言,可以管理和優化物流中的各企業各部門之間的異構資源,實現基于面向服務的體系架構的物流信息系統的集成。
目前物流信息系統主要存在以下問題:
(1)由于實現技術和系統結構的不同,導致系統間交互復雜;
(2)數據流向混亂、流程繁多;
(3)結構復雜,使得業務需求不易改變。
針對目前物流信息系統存在的問題,在對現有系統的有效集成基礎上,利用Web Services封裝原有需要開放出來的功能,從而使各系統都具有統一的接口標準,并通過引入SOA架構,不但能夠實現各系統間的信息交互,還能使之成為既相互獨立,又協調統一的整體,構建出如圖1所示的物流信息系統架構。在此架構中還搭建了一個公共信息交換平臺,該平臺是為實現系統集成和各個系統之問的數據共享,提供有效地決策支持數據,需要建立基于數據管理和利用的綜合性技術方案的共享數據中心,用以存放大量數據的同時有效地將數據管理起來,提供數據訪問的手段,為集成系統和各個子系統之間的數據共享提供平臺,保證數據的及時性、完整性和一致性[2]。
Web服務體系結構描述了服務請求者、服務提供者和UDDI服務注冊中心三個角色以及查找、發布和綁定與發現這三種操作[3]。服務提供者通過客戶端發布代理在服務注冊中心 (通常采用UDDI)注冊配置和發布服務;服務請求者需要使用某個Web服務時,根據服務信息使用客戶端查找代理在服務注冊中心查找所需的服務,注冊中心返回服務的接口描述文檔 (WSDL);服務請求者根據獲取的服務接口描述文檔通過SOAP協議綁定服務提供者并調用提供者所提供的服務。

圖1 基于SOA的物流信息系統架構
系統把服務代理的角色引入SOA模型,從而實現對SOA模型的擴展。該模型除了服務提供者、服務請求者和UDDI服務注冊中心三個基本角色外,還包括一個特殊的角色——服務代理。服務代理處于服務提供者和服務請求者之間,起到中介作用,所有已知并且可用的Web Services都將映射到服務代理上[4]。服務代理將根據自己功能的需要對Web Services的屬性進行擴展,從而達到提高Web Services檢索效率的目的。
以擴展的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編碼就可以實現。
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流程和服務代理之間的屬于同步調用關系,只需定義服務代理的端口和角色。
本文通過采用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.