APP下载

基于WCF技术构建分布式数据服务

2013-04-13杨远超

铁道勘察 2013年5期
关键词:服务端数据服务勘测

杨远超

(中铁第一勘察设计院集团有限公司, 陕西西安 710043)

1 铁路勘测设计数据的分类与组织

在铁路勘测设计过程中,除了少部分的描述性文本资料外,各专业的文件大都可以用地理坐标系和线路坐标系来标识。以地理坐标系来描述的成果多为勘测类数据,如各类控制点、地形图、地质图等,这些数据的空间特性需要二维或三维坐标来描述。以线路坐标系来描述的成果多为专业设计数据,与铁路相关的数据的空间特性转化为沿铁路线的一维标识(即线路里程)。通过线路曲线和断链信息,可以将勘测设计成果数据在地理坐标系和线路坐标系间转换,坐标转换需要考虑地理坐标系的分带和线路坐标系的所属方案等问题。

将一条铁路线的勘察设计定义为一个项目,以方案和坐标为关键字来建立各专业数据库,各专业数据库间的数据接口参照正式颁布的数据接口标准来建立。某个专业一旦完成某项工作,就将结果存入数据库,同时发布消息,通知后续专业使用。专业数据可抽象为文件类和表格类数据。文件类数据是指以各种文件格式存储的专业勘测设计数据,包括各类图片、图形、文本、电子表格文件,这类数据在数据库中都以BLOB对象进行存储,导入数据库时将文件转换为二进制数据流,获取数据时将其还原为对应格式的文件。表格类数据是指在专业数据库中以数据库表格形式存储的数据,可使用SQL语言直接解析数据的全部属性。数据分类与组织如图1所示。

图1 铁路协同设计平台的数据分类与组织

2 WCF技术简介

WCF(Windows Communication Foundation)是微软公司为构建面向服务的应用提供的分布式通信编程框架,可以用它构建跨平台,安全、可靠和支持事务处理的企业级互联应用解决方案。其基础的技术架构如图2所示。

图2 WCF技术架构

如图2所示,WCF服务端向客户端提供一些可用的功能,如服务1、2、3,WCF客户端通过终结点来访问WCF服务,一个服务端至少要提供一个终结点供客户端使用。服务端的终结点,由“ABC”构成,Address(地址)解决在哪里找到服务的问题;Binding(绑定)解决如何与服务进行通讯的问题;Contract(契约)解决服务是一些什么内容的问题。

一个WCF服务需要在一个可运行的程序中寄宿,可以把宿主理解为WCF运行的容器。在客户端访问服务之前,服务必须通过宿主程序发布出来。常用的WCF寄宿方式包括:自寄宿、IIS寄宿、Windows激活服务、Windows服务。根据面向服务的原则,激活和宿主类型的变化不会影响服务本身的特性和外部对该服务的访问,这样就可以根据实际部署的需要灵活选用各类寄宿方式。在实际应用中,以IIS寄宿类型居多,本文将也以IIS宿主程序为例,介绍如何构建分布式数据服务。

3 分布式数据服务的建立

3.1 建立数据服务端程序

首先以管理员身份启动Microsoft Visual Studio 2010程序(操作系统为 Windows Server 2008),点击文件—新建—项目,打开一个对话框,在左侧的模板中选择编程语言(如Visual C#),然后选择“WCF”,在随后出现的类型中选择“WCF服务程序”,依次填入项目的名称、项目文件路径和解决方案名称,最后点击“确定”,创建一个WCF服务程序。

然后按照微软的推荐做法,先在形如IServiceRealScene.cs(RealScene为项目名称)的文件中定义数据服务的接口(IServiceRealScene)和数据契约。如本项目中定义了项目、分带坐标系、方案、专业、存储格式、线路曲线、断链、坡度、设计标准类型、设计标准等数据类型,用作接口服务的参数定义。服务接口程序的定义则根据需要订制,可以自由选择其参数和返回值类型。如示例项目就定义了从总服务器查询专业数据的注册信息以及根据注册信息索引从专业数据库提取、更新数据的各类服务。在定义的数据服务中,如果需要返回一个通用的xml文档(即System.Xml.XmlDocument类型),则需要在接口定义前加上形如[XmlSerializerFormat]字样的标记,否则客户端程序将不能正确识别接口,导致程序编译错误。需要特别说明的是,如果编写的服务要实现分布式事务,在不同的数据库中提交数据更改,则在定义服务接口时需要在接口定义前加上[TransactionFlow(TransactionFlowOption.Allowed)]字样的标记,表示服务操作愿意接受来自客户端的传入事务。

最后,打开形如ServiceRealScene.svc(RealScene为项目名称)的文件,在其中编写数据服务接口的实现代码,在上一步骤中定义的每一个数据服务接口都必须在此实现。给继承自接口IServiceRealScene的类ServiceRealScene加上[ServiceBehavior(Instance ContextMode=InstanceContextMode.PerCall,Concurrency Mode=ConcurrencyMode.Multiple)]字样的标记,用来指示其服务行为中的实例控制、并发控制模式。服务端实例控制采用了PerCall实例策略,每个客户端的请求消息都会被分发到一个新的服务实例上。而一旦这个调用返回后,服务实例则会被销毁。并发控制模式为Multiple,表示WCF不会主动为服务操作添加任何锁,每个操作都允许客户端多个请求同时访问,这样做的好处是提高了系统的运行效率,防止消息被阻塞。实现接口服务的类函数必须与接口服务函数名相同,参数一致,并且设置为公众函数public供客户端调用。同样,若要实现分布式事务,则应将前面所述的并发控制模式应为Single模式,即ConcurrencyMode=ConcurrencyMode.Single,并在要实现事务处理的函数加上[OperationBehavior(TransactionScopeRequired=true)]字样的标记,表示此函数在执行时需要事务范围。

3.2 发布数据服务

在VS 2010程序的“解决方案管理器”中选择建立WCF服务程序,点右键选择“属性”选项,在打开的页面中选择“Web”,选中“使用本地IIS Web服务器”,点击“创建虚拟目录”,则在本地的IIS Web服务器创建了一个与项目名相同的网站。启动本地Internet信息服务(IIS)管理器,在左侧的网站列表中点击这个网站,然后双击其“目录浏览”图标,在打开的页面右侧的“操作”栏点击“启动”,打开网站目录浏览的功能,完成数据服务的发布。

3.3 客户端的服务引用

在客户端建立控制台应用程序或Windows窗体应用程序,在界面右侧的“解决方案资源管理器”中右键点击“引用”目录,选择“添加服务引用”,在弹出的对话框“地址”栏中输入服务的发布地址(可通过运行WCF服务端程序,点击打开网页后缀名为SVC的链接,则打开的网址即为服务地址,非本地引用时需要将其localhost字样换为服务器所在的IP地址即可),点击“前往”按钮,则找到对应的服务,在“命名空间”栏输入客户端引用服务的名称,点击“确定”按钮,则成功添加服务引用,如图3所示。

图3 客户端引用数据服务

添加服务引用后,在客户端就可以通过代理直接使用服务端发布的数据服务,实现所需的数据发布与更新功能。

4 结束语

WCF技术本身具有很好的兼容性,可以在不改变铁路设计各专业既有后台数据的情况下,以专业间的数据交换标准为参照,通过服务接口的定义和发布,实现数据的分发与共享,完成专业间的协同设计。当然,由于铁路设计本身的复杂性和专业协同的要求,对数据服务权限、数据版本的控制以及在用户并发量上升时如何保证服务的可靠性和有效性,这些都需要通过对系统的精心设计和严格测试,才能使建立的分布式数据服务达到应用的要求。

[1]布斯塔曼特(Micbele Leroux Bustamance)(著),庞引明、侯伯薇(译).学习WCF从原理到实践[M].北京:电子工业出版社,2008

[2]吴清寿.基于WCF的分布式系统模型研究与实现[J].吉林师范大学学报(自然科学版),2012(3)

[3]李雪东.基于WCF面向服务架构的研究与应用[D].长春:长春理工大学,2009

[4]汪享庆.铁路勘测设计协同设计探讨[J].交通与计算机,2008(1)

[5]石红兵,郑云,曾学贵.勘测设计一体化软件开发过程中数据库的设计[J].铁道工程学报,2000(2)

[6]彭先宝.铁路勘测设计一体化系统开发策略分析[J].铁道勘察,2008(2)

猜你喜欢

服务端数据服务勘测
大数据时代高校图书馆数据服务的困境及优化路径
渭南市水利水电勘测设计院
地理空间大数据服务自然资源调查监测的方向分析
《城市勘测》理事单位名录
基于数据中台的数据服务建设规范研究
小型无人机在水利工程勘测中的应用研究
勘测设计
新时期《移动Web服务端开发》课程教学改革的研究
数据服务依赖图模型及自动组合方法研究
摸清黑客套路防范木马侵入