基于Silverlight+WCF服务构建测绘资料管理系统Web GIS框架
2018-10-15段建刚
段建刚
(吉林省水利水电勘测设计研究院,吉林 长春 130012)
多年的测绘工作积累了大量的成果资料,有纸质的各种图(表)、电子数据光盘等等。由于资料数量多、存储分散,想要查找利用已有的成果就会变得非常困难,而且经年累月,数据量还在不停地增长。随着地理信息技术及网络技术的发展,需要开发一个基于局域网测绘成果资料管理系统。基于Silverlight富客户端技术、WCF数据服务技术、Web GIS技术和数据库技术来构建本系统框架,下面以此成果管理系统为例详细剖析基于Silverlight富客户端技术和WCF数据服务技术Web GIS框架的构建。
1 技术分析
传统的Web GIS框架一般采用B/S模式或C/S模式[1]。B/S模式由客户端向服务器发起数据请求,服务器根据用户请求完成全部的数据计算,然后将结果发送给浏览器显示;C/S模式由客户端向服务器发起数据请求,服务器根据用户请求完成数据计算,然后将数据发送给客户端,客户端对中间数据进行再加工,然后将最终结果显示给用户[2]。B/S架构的技术瓶颈都集中在服务器端,这样会造成服务器的计算压力过大,影响服务器并发量和用户体验;C/S架构稍好,客户端能够适当分担一部分服务器端的计算压力,用户体验较好。B/S架构的优点是客户端为浏览器,无需另外安装客户端,系统升级时只需升级服务器端即可完成系统的升级,而C/S架构需要另外安装客户端软件,系统升级时需要将服务器端和客户端都升级才能更好地协同工作。鉴于此,便有了基于浏览器的富客户端技术,Silverlight技术就是一种微软发布的基于浏览器的富客户端技术,它以浏览器插件的形式工作和更新的,是B/S架构和C/S架构二者优点相结合的产物,插件安装后就可以利用客户端的计算能力了[3]。
数据库能向用户提供高效的数据存储、管理、检索、备份、恢复等功能,所以本系统框架会使用数据库平台来管理数据,以数据库检索作为管理资料的属性检索技术支持,以GIS空间检索作为框架平台的空间检索技术支持。将成果资料存放在网站服务器目录中,提取每项成果资料的元数据(成果资料的基本信息),将元数据存放在数据库中,并建立字段索引,方便在检索的时候可以快速通过元数据检索到成果资料本身。
由于服务器端是不允许客户端直接操作服务器数据库数据的,而寄宿在服务器端的Web服务是可以操作服务器数据库数据的,所以客户端需要通过Web服务这个桥梁来间接完成对服务器数据库数据的操作[4]。Web服务通过服务器向客户端公开交互接口,这样客户端就能连接到并使用这个Web服务了。客户端向服务器发送请求,然后服务器将请求交给Web服务去处理,Web服务按照请求检索数据库,并通过服务器将结果发送回客户端。Silverlight客户端根据用户需求定制功能模块[5],主要有浏览功能模块、用户管理模块、成果资料管理模块。用户通过操作这些功能模块与服务器交互。
从上面的分析可以很明显地看出本架构是一个典型的3层架构GIS应用系统。第1层为基础数据库层,第2层为Web数据服务,第3层为GIS应用层。
2 设计与实现
2.1 系统框架总体设计
本系统框架是一个基于数据库的Web GIS系统框架,主要功能模块有浏览功能模块、用户管理模块、成果资料管理模块三大模块。浏览功能模块包括缩放、平移、选取、图层管理、选择,用户管理模块包括用户管理、用户角色管理、用户权限管理,成果资料管理模块包括成果资料上传、归档、查询、修改、下载。由于本框架的基础数据库存储的是成果资料的元数据,所以数据量较小,侧重点是检索效率及数据安全,所以采用目前最流行的SQL Server 2008 Express版作为本框架的数据库平台。Web服务是多种多样的,最常用的有基于.NET平台的Web Service、WCF等,在本框架使用WCF数据服务作为通信纽带。采用ASP网站作为服务器端,使用该网站来承载WCF服务。客户端为基于ArcGIS API for Silverlight开发的富客户度浏览器应用程序。本系统的详细架构如图1所示。
图1 框架详细架构图
2.2 数据库设计
SQL Server数据库是关系型数据库,采用表格和记录的方式来管理数据。本框架系统的基础数据库包含两个库:用户管理库、成果资料库。用户管理库存储用户基本信息和用户角色信息、权限信息等,各个数据表的结构及关系如图2所示;成果资料库存储成果资料的元数据信息,成果资料元数据抽象信息及各表关系如图3所示。
图2 用户管理库“用户-角色-权限”关系图
图3 成果资料库表格关系图
SQL Server所使用的数据库查询语言TransactSQL是SQL Server的核心,可以使用TransactSQL编写功能强大的存储过程,存储过程存放在服务器端,并且预先编译过,执行速度非常块[6]。创建了插入、修改和查询等存储过程,通过触发这些存储过程来控制相关表格中的数据操作。
2.3 服务器端设计
由于服务器是不允许客户端直接操作服务器端数据库数据的,而寄宿在服务器端网站的WCF服务可以直接操作服务器的数据库,所以客户端必须通过访问WCF服务来间接达到操作服务器数据库的目的。因为本框架服务器端的ASP网站不向客户端发送任何实时生成的网页,只是作为一个数据服务器而存在,即作为WCF数据服务的一个宿主网站,所以服务器端设计其实主要是该网站承载的WCF服务的设计。
WCF服务利用契约将服务和服务的操作定义为一个整体,以解释通过网络传递的数据。契约用来定义数据类型、操作、消息交换模式和消息交换使用的传输协议,契约提供了服务通信所必需的元数据,契约通常使用与程序语言无关的XML格式发布的。WCF有三类契约:服务契约、数据契约、错误契约和消息契约[7]。
服务契约定义了WCF服务向外界公开的功能,这些功能表现为服务操作(Service Operation)。通常,需要把一个或多个参数传递给一个服务操作,并等待服务操作返回一个值。数据契约定义了客户端与服务之间信息交换的结构和内容。如果需要使用自定义对象或复杂数据类型作为服务操作的参数或返回值,则必须向运行时提供信息,告知如何用DataContract特性把这些类型序列化为XML流。
本系统框架有3个功能模块,由于浏览模块的功能只与客户端显示的当前数据有关,无需与服务器端数据进行通信,所以该模块的设计放在Silverlight客户端,因此只需设计2个WCF数据服务:用户管理服务、成果管理服务即可,服务的接口设计应能满足客户端的相应功能模块设计为宜。
创建一个命名为UserWcfService的启动了Silverlight功能的WCF服务,该服务即为用户管理服务,该服务定义了“注册新用户”、“登录系统”、“修改用户信息”等操作,其服务契约定义如下。很明显,该服务的操作方法的参数和返回值中用到了两个自定义对象类型:UserInfo、UserRole,其中UserInfo对象为包含用户基本信息的对象类型,UserRole为包含用户角色信息的对象类型,所以,还需要定义这两个自定义对象类型的数据契约。
[ServiceContract(Namespace="CHYDMS.Web")]
[SilverlightFaultBehavior]
[AspNetCompatibilityRequirements(Requiremen-tsMode=AspNetCompatibilityRequirementsMode.Allo-wed)]
public class UserWcfService
{
[OperationContract]
public int RegisterUser(UserInfo ui){…}
[OperationContract]
public UserInfo Login(string uname,string upwd){…}
[OperationContract]
public bool UpdateUserInfo(UserInfo ui){…}
[OperationContract]
public bool ChangePassword(string uname,string oldpwd,string newpwd){…}
[OperationContract]
public int GrantUserRole(string uname,UserRole ur){…}
[OperationContract]
public int UnGrantUserRole(string uname,int rid){…}
[OperationContract]
public UserRole[]GetUserRole(Guid uid,string uname){…}
}
[DataContract]
public class UserInfo
{
[DataMember]
public int UserID{get;set;}//用户ID
[DataMember]
public string UserName{get;set;}//用户名
[DataMember]
public string Password{get;set;}//用户密码
…
}
[DataContract]
public class UserRole
{
[DataMember]
public int RoleID{get;set;}//ID代码
[DataMember]
public string Name{get;set;}//角色名称
[DataMember]
public string Description{get;set;}//描述
}
创建一个命名为PrjManWcfService的启动了Silverlight功能的WCF服务为成果管理服务,该服务定义了“上传”、“归档”、“修改”等操作,其服务契约定义如下。该服务的操作方法用到了自定义对象类型PrjInfo,它包含成果资料基本信息,定义PrjInfo对象类型的数据契约。
[ServiceContract(Namespace="CHYDMS.
Web")]
[SilverlightFaultBehavior]
[AspNetCompatibilityRequirements(Requiremen-tsMode=AspNetCompatibilityRequirementsMode.
Allowed)]
public class PrjManWcfService
{
[OperationContract]
public int UploadPrjData(Guid uid,PrjInfo pinfo){…}
[OperationContract]
public int ArchivePrj(Guid uid,int pcode,string pname){…}
[OperationContract]
public int UpdatePrjInfo(Guid uid,PrjInfo pinfo){…}
[OperationContract]
public PrjInfo GetPrjInfoByCode(Guid uid,int prjcode){…}
[OperationContract]
public PrjInfo[]QuerryPrj(Guid uid,PrjInfo pinfo){…}
[OperationContract]
public int DownloadPrjData(Guid uid,PrjInfo pinfo){…}
}
[DataContract]
public class PrjInfo
{
[DataMember]
public int PrjID{get;set;}//代码
[DataMember]
public string Name{get;set;}//名称
[DataMember]
public double Amount{get;set;}//金额
…
}
WCF服务允许服务使用任何协议与客户端进行通信,如HTTP、TCP、命名管道、MSMQ、自定义协议[8],可以根据允许客户端的使用范围来确定使用的通信协议。本框架系统因为运行在局域网环境,所以将所有的WCF服务使用netTcpBinding绑定发布,它使用TCP协议。这样就可以使得WCF服务限制到只有局部网内的用户可以访问。另外,本系统框架为Web系统框架,为了保证服务器数据的安全,系统只允许合法登录的注册用户才能使用该系统的功能和数据,并且要建立详细的日志功能,用来记录用户对基础数据库的操作足迹。
2.4 客户端设计
Silverlight采用JIT方式在客户端运行,并不依赖浏览器运行,而使用自有的运行沙箱,可以跨浏览器、跨平台,无论在哪运行,都能提供一致的用户体验。在各个层次Silverlight都能得到.NET平台的全面支持。
在通信层中,Silverlight支持WCF通信方式,而后者几乎将目前所有通信类全部管理起来。Silverlight富客户端通过引用服务器端承载运行的WCF数据服务并创建该服务的代理客户端,这样,通过客户端就能够方便地调用WCF服务中公开的用户功能接口来使用该WCF服务的操作和数据了[9]。
在客户端控制逻辑层,采用专门后台工作线程与表现层的UI线程分离,在处理后台计算的同时不影响界面响应。Silverlight客户端控制逻辑层可以通过读取数据并且更新外观显示,但不会通过刷新整体页面来打断用户操作。
在表现层Silverlight具有包括矢量图形支持、硬件加速、3D图形、图形变形,同时还包含原生动画、特效以及超过100种控件,而用户也可以通过设计与开发两种方式扩展动画、特效和控件[10]。本系统框架使用Visual Studio 2010作为Silverlight客户端的开发环境,借助Silverlight的已有控件开发了多个控件,如各种对话框、交互窗口中的各种输入控件、各种信息显示控件等。就像Visual Studio中的控件使用一样,大大增加了代码的重用度,降低了开发工作量。
前面说过,本框架的浏览模块功能不需要与服务器进行通信,只与当前显示的数据有关,所以将该模块的功能都放在了客户端的设计中。这样做的好处有两点:①浏览操作是使用频率最高的操作,由于在操作时不与服务器进行通信,这大大降低了网络通信和服务器的压力。②由于操作完全是本地的(网络操作会有延迟),所以操作会更流畅,用户体验更好。
3 结论
经验证,基于该框架开发的测绘院成果管理系统,解决了测绘成果资料多、存储分散、检索困难的问题。
结论如下:①本框架较好地利用了B/S架构和C/S架构二者的优点。②将部分计算模块转移到了Silverlight客户端,大大降低了服务器的计算压力。③Silverlight客户端通过WCF数据服务实现对服务器端数据库的在线管理和访问。④该框架为通用框架,类似网络信息管理系统建设可以借鉴该框架设计。
当然,该框架的设计也有不足之处,用户通过浏览器首次访问系统时,需安装Silverlight插件。不过,它只是一个客户端的运行环境而已,后续系统功能上的更新不再依赖于Silverlight客户端的更新。