颜巧林,周廷美,黄 丰,莫易敏
(武汉理工大学机电工程学院,湖北 武汉 430070)
铁路机务段担负着为铁路运输提供牵引动力的重要职责[1],在铁路车、机、工、辆、电等行业中,具有非常重要的地位[2]。从它的工作内容上看,机务段主要负责机车运用、整备、检修等作业,为机车质量、安全等分析提供最全面的原始数据。
机车在运行途中和整备、检修过程中积累的原始数据是进行机车安全和质量分析的数据基础。计统科、运用科等段内部门,检修基地、铁路局等段外部门,都需要获得机车最基础的信息,以便进行机车实时状态分析。现阶段,机务段活件提报和统计分析都处于纯手工阶段,与相关部门的信息交流依赖于人工手动传递,不能保证活件信息的及时性和准确性。因此,开发一套适用于机务段机车活件录入和智能分析的信息系统具有重要的现实意义。
针对以上情况,笔者提出了一种基于WCF(windows communication foundation)的信息共享解决方案。该方案以WCF技术为核心,采用面向服务的分布式分层架构,实现机车活件提报的信息化,可以将员工从繁重的活件录入和系统分析中解放出来,提高其工作积极性和工作效率。同时,通过与相关部门共享机车活件信息,为需求部门提供实时的机车数据分析和质量分析,保障机车质量,确保行车安全。
WCF是基于Windows平台开发和部署服务的软件开发包,是一个面向服务的分布式分层架构,开发者可以通过它方便、快捷地搭建一个安全的、事务性的、可信赖的面向服务的企业级分布式系统架构[3]。该框架旨在统一.NET下各种不同的分布式通信技术(包括ASMX、.NET Remoting、COM+/企业服务、System.Messaging、MSMQ,以及WSE),实现Web services(WS-*)的所有标准,并在程序设计和架构上遵循面向服务的宗旨,建立面向服务的分布式分层架构。图1为WCF的体系结构,包括协定、服务运行时、消息传递、激活和承载4 个层[4]。
其中,协定层定义消息系统的各个方面;服务运行时层包含仅在服务实际运行期间发生的行为,即该服务的运行时行为;消息传递层由通道组成,用于说明数据的可能格式和交换模式;激活和承载层指示服务的最终形式是程序。
图1 WCF体系结构
WCF最重要的要素之一便是契约。通过契约,可以定制WCF所需的通信方式、服务方式,以及用于通信的数据信息方式等。契约主要包括:
(1)服务契约。它主要用于指示WCF应用程序中的服务协议,包括可以提供哪些服务以及该服务的通信方式等[5]。通过服务契约接口的定义,可以将WCF服务接口与用户实际服务完全分离,服务逻辑、服务内容的更改均不会影响接口的定义,从而达到解松耦合的目的。
(2)数据契约。它是一个通信数据的约定,通过它可定义或实现一个数据协定,并可由序列化程序(如DataContractSerializer类)进行序列化。
(3)消息契约。它与数据契约相似,定义一个与SOA消息相对应的强类型类。用户可以通过消息契约的自定义格式,对该消息进行自定义传递。
(4)错误契约。它主要用于指定服务操作遇到处理错误时返回的一个或多个SOAP错误,并定义如何将该异常传递给客户端。
客户端与服务端之间的消息交换都是基于端点的,因此,端点是实现WCF通信的核心。WCF允许为服务添加多个绑定和端点。端点主要由3个部分组成,即常说的“ABC”[6]。其中,A 代表地址(address),它是端点的网络地址,标识了消息发送的目的地,包括节点的端口号、IP地址和端口名称[7-9]。B代表绑定(binding),用于描述消息传输协议(如TCP、HTTP等)和传输安全(如SSL、SOAP消息安全等)。C代表契约(contract),用于描述消息所包含的内容以及消息的组织和操作方式,如单工(oneway)、双工(duplex)和请求/应答(request/reply)。
WCF在具备了服务契约和具体的服务类型后,还需要一个应用程序来承载该服务。
WCF中承载服务的宿主非常灵活,可以是任何.Net应用程序,包括控制台程序、Windows窗体程序、Web Service服务、Windows服务和互联网信息服务(internet information services,IIS)等。
机车活件提报系统主要包括两部分内容:机车活件录入模块和机车活件统计分析模块。其中,机车活件录入模块主要是对机车活件进行编辑,包括活件添加、修改、删除、查询、活件导出和导入等功能;机车活件统计分析模块主要实现按年、月、日、机型车号和部件分别对机车活件进行统计和分析,并生成统计图表。
由于WCF继承了SOA的体系结构,因此,基于WCF的机车活件提报系统多层服务模型可以分为:应用程序集、WCF服务层、业务逻辑层和数据访问层,如图2所示。并且,当段内或段外其他系统需要访问机车活件提报系统内的数据时,通过共享的WCF服务,即可完成操作。这样,不但避免了软件的重开发,又实现了与段内和段外相关部门的信息共享,降低了开发成本,提高了软件复用率。
图2 机车活件提报系统架构
在该服务模型中,各个层的功能如下:
(1)应用程序集。为用户提供对应程序的访问界面,用于接收用户指令,收集用户提交数据,并显示反馈结果。
(2)WCF服务层。为界面层提供服务接口,当用户添加、修改或删除活件信息时,实际上是调用WCF服务的接口来达到操作目的。根据SOA架构思想,通过将服务契约与服务内容分离,可使服务使用者与服务提供者之间共享服务契约而非具体的代码,减少二者之间的耦合性[4]。
(3)业务逻辑层。业务逻辑层是针对WCF服务层建立的。它封装了实际的业务逻辑,包括数据验证、事务处理和权限处理等相关操作,不但为上层服务提供数据库调用的各种方法,还为下层数据访问层定义更具体的调用数据方法的说明,起着“承上启下”的作用。实际上,业务逻辑层是WCF服务层接口的实现[10],它通过真正的服务类继承服务接口,完成操作代码的实际编写。
(4)数据访问层。数据访问层直接与底层的数据库衔接,为业务组件和底层数据提供了一个数据交换平台,并可直接调用数据库中的各种数据。此外,它还提供了数据信息和数据逻辑,使业务逻辑层只处理业务逻辑而无需关心底层的数据结构。因此,数据访问层封装了整个系统的数据库访问逻辑,向业务逻辑层提供了统一的数据库访问接口。
3.2.1 契约的建立
一般来说,一个WCF服务契约包括两个类,称为IServices类和 Services类[11]。其中 IServices类定义的是服务接口,Services类是实现IService服务中声明的所有方法。该系统共提供了两类服务接口:
(1)活件信息编辑服务。服务契约为ILiveWareEditor,实例名称为单调服务,操作模式为单项操作,服务提供者为机车活件提报系统,服务调用者为机车活件提报系统的用户界面层。其功能是用于活件信息的编辑,包括添加、修改、删除、查找、导出和导入等。
(2)活件信息统计分析服务。服务契约为ILiveWareAnalyze,实例名称为单调服务,操作模式为单项操作,服务提供者为机车活件提报系统,服务调用者为机车活件提报系统的用户界面层、段内相关部门和段外相关部门的活件信息统计分析模块。其功能是按要求对活件信息进行统计分析。
由于机车活件提报系统将在服务器上公布服务契约ILiveWareEditor和ILiveWareAnalyze,而在ILiveWareEditor契约中的LiveWareAdd和LiveWareUpdate服务都需要添加具体的活件信息作为参数,因此,在契约中添加5个数据契约,TypeInfor,NumInfor,LiveWareInfor,MethodsInfor 和 Operater-Infor分别用于描述机型信息、车号信息、活件信息、活件处理信息和操作人信息。
部分WCF契约如下:
在Services类中,通过实现IServices中定义的所有方法,即可完成服务契约的设计。
3.2.2 配置服务端点
(1)配置服务端点。使用Service Configuration Editor或手动配置服务端点,为已实现的服务契约关联地址和绑定。值得注意的是,在设置服务地址的时候要保证服务地址的唯一性。该系统的服务地址Address为http://202.114.56.183:8000/WCFService,绑定方式 Bingding为 WsHttPBinding,契约 Contract为 Contract.IServices。
(2)服务管理。在部署了服务契约、服务地址和服务绑定之后,需设置如下与服务相关的管理模式:①服务实例管理。由于在实际的系统应用中,活件添加、查询等操作会被频繁大量地调用,因此将两种服务设置为默认的单调服务。②服务操作管理。活件信息编辑服务和活件信息统计分析服务中的操作很显然都是单向操作,只需要服务端进行业务数据处理,然后返回操作结果。因此,将这两个操作设置为默认的请求/应答(request/reply)操作。
3.2.3 宿主程序的建立
使用控制台程序作为宿主。在启动宿主程序时,直接开启服务,即建立了WCF的服务。若需要使用这些服务,只需在开启该服务后,调用这些显示在服务器上的服务即可。
由于机车活件统计分析服务将被机车活件提报系统、段内和段外相关统计分析模块反复调用,因此在调用服务时,要考虑WCF服务的安全性。这里通过在服务器端对客户端进行用户名密码验证来确认客户端具备调用某种服务的权限。
服务端用户名密码认证采用自定义模式,其代码为:
这里用户名密码的验证需要访问数据库中的权限表。因此,需调用数据访问层中访问数据库的方法。要启用WCF的自定义验证功能,还需在服务端配置文件,即app.config中配置Service Behavior,指定服务端验证模式为 Custom(自定义)[12]。配置文件更改如下:
如此可完成服务端安全认证的设置。
图3为活件提报系统的活件提报界面。该界面主要完成活件的录入和提交,为接下来的活件统计分析和机车质量安全分析提供最原始的数据。目前,该系统在段内运行良好。
图3 活件提报系统的活件提报界面图
基于WCF的活件提报系统开发,大大简化了开发和维护的难度。该系统的使用,实现了机车活件提报的半自动化,大大减少了员工的工作量,既提高了工作效率,又降低了劳动成本。此外,WCF技术还实现了相关信息与段内各部门,段外相关部门的共享,可保障机车质量,确保行车安全。
[1] 吴春复,张培彬.铁路机务段信息系统的设计与实践[J].内燃机车,2000(9):28-30.
[2] 倪建春.浅谈铁路机务段的标准化工作[J].铁道技术监督,1997(5):13-14.
[3] 沈正.WCF的研究与开发[J].中国新技术新产品,2009(19):13-14.
[4] 沈正,陈锺.基于WCF和SOA的电力SCADA系统研究与开发[J].信息技术,2009(13):17-18.
[5] 李雪东.基于WCF的面向服务架构的研究与应用[D].吉林:长春理工大学图书馆,2008.
[6] 黄森,刘丰.基于WCF的数据流传输方案研究与应用[J].计算机安全,2009(12):14-18.
[7] 钱涛.基于WCF的机房管理系统的设计与实现[J].计算机技术与自动化,2010(29):135-137.
[8] 程汤培.基于WCF的即时通信软件的设计与实现[J].电脑编程技巧与维护,2008(4):24-77.
[9] 吴迪,李立新.WCF安全模型的设计与实现[J].网络安全技术与应用,2008(10):12-14.
[10] 王晔,刘红.基于WCF技术架构的移动教学信息查询系统的设计与实现[J].中国教育信息化,2010(9):49-51.
[11] BILL E.C#高级编程[M].4版.李敏波,译.北京:清华大学出版社,2006:110-111.
[12] 季亮.基于WCF的信息平台安全技术研究[D].四川:西南交通大学图书馆,2007.