APP下载

基于WCF的数据库应用开发

2018-09-13于磊

电脑知识与技术 2018年17期
关键词:契约服务

于磊

摘要:在开放网络环境下直接暴露数据库给客户端应用存在着众多的安全威胁。将数据库从开放网络中隔离开,借助WCF将应用所需的数据库操作以数据库服务的方式发布出来;客户端不再直接访问数据库,而是通过服务引用完成数据库操作。从而提高数据库的安全性、消除客户端应用与数据库之间的耦合、增强系统结构的灵活性。通过实际应用开发表明,该方法具有良好的效果。

关键词: 服务;契约;终结点;SQL Server

中图分类号:TP319 文献标识码:A 文章编号:1009-3044(2018)17-0017-02

在数据库应用开发中,一种传统的做法是将数据库暴露给客户端应用。客户端应用程序根据需求直接连接数据库以实现对数据库的各项操作。但当整个系统建立在开放网络环境下时,数据库的安全问题便凸显出来。其主要存在的安全威胁有:漏洞或误操作导致的数据库数据错误、非权限范围内的数据被非法访问、数据库的访问受到攻击、数据库内的数据被非法窃取或篡改等。

微软的WCF技术允许创建服务,可以跨进程、计算机和网络从其他应用程序访问这些服务。利用这些服务,可在多个应用程序中共享功能,提供数据源,或者抽象复杂进程[1]。对于开放网络环境下的数据库应用,我们可以将数据库从开放网络中隔离开,借助WCF将应用所需的数据库操作以数据库服务的方式发布出来;客户端不再直接对数据库进行访问,而是通过服务引用完成数据库操作,从而提高数据库的安全性、消除客户端应用与数据库之间的耦合、增强系统结构的灵活性。

综上,在我校《成人高等教育毕业生审核系统》的开发中,最终采用WCF技术对数据库操作及访问进行了开发实现。

1数据契约的建立

WCF的服务是以消息交换的方式实现的。在数据库应用中,客户端生成数据操作请求,对应的请求参数会被WCF序列化为XML信息集并捆绑到请求消息中发送到服务端;而服务则将接收到的请求消息中表示输入参数的XML信息反序列化为CLR数据类型,并实现相应的数据库操作,其操作的返回值及输出参数又会被序列化为XML信息集并捆绑到回复消息中发送到客户端。最后,客户端再通过反序列化获得并应用返回结果。而数据契约是声明CLR数据类型与XML信息集之间的转换的一种正式规格说明。

WCF的数据契约的建立首先通过在相应类或结构上应用DataContract特性,表明类或结构可以被按值封送。对于类或结构中需要序列化的字段或属性成员,还必须应用DataMember特性。例如为了表示系统中的学生实体,我们编写了如下数据契约:

2数据库访问的实现

在基于WCF的数据库应用程序开发中,其数据库访问的实现具有极强的灵活性。首先对于数据库应用程序的模式,无论是B/S还是C/S,WCF都没有严格的限制。其次,在基于三层架构的应用开发中,既可以选择将数据访问层DAL作为服务发布,业务逻辑层BLL与UI层则由客户端实现;也可以将业务逻辑层作为服务发布出来,客户端只需要实现UI。最后,在数据库访问技术的选择上,无论是ODBC、LINQ to SQL还是ADO.NET,都可以在WCF中实现。

本系统采用的是SQL Server數据库管理系统,由于目前的应用需求只局限在Intranet,因此我们选择了基于C/S模式并将业务逻辑层、UI置于客户端,只将数据访问层作为WCF服务发布出来,而数据库的访问技术上我们选择了ADO.NET。为了完成系统各项数据库操作,首先在SQL Server中建立所需要的存储过程,系统的数据库访问实现结构如图1所示。

数据库的通用基础操作由抽象类DbHelper实现,具体对SQL数据库的支持是通过继承自DbHelper的SqlDbHelper来实现。而最终的数据访问类型GraduatesDA则继承自抽象类DbAccessBase实现。例如GraduatesDA类中通过考生号查询待审核毕业学生的信息的查询操作实现为:

(1)服务契约的建立

服务契约是对服务能够提供的操作的描述,是对操作所采用的消息交换方式的描述和消息格式的定义,以便实现跨越服务边界的服务调用。为了完成数据契约的定义,我们需要在相应的接口或类上应用ServiceContract特性,并在需要暴露为WCF契约的方法上显式使用OperationContract特性,使其成为契约的一部分。

例如,为了描述上述通过考生号查询待审核毕业学生的信息,建立的契约接口如下:

(2)服务的发布与寄宿

服务端最终通过终结点将服务发布出来,而客户端对服务的调用则是通过与之相匹配的终结点进行,终结点承载了WCF的所有通信功能。终结点由地址、绑定和契约三要素组成,每个服务至少必须公开一个终结点。终结点的配置既可以以配置的方式实现,也可以以编程的方式实现。

终结点中的地址表明服务的位置,用于完成服务的寻址。

终结点中的绑定用于定义服务的通信方式。绑定是对服务之间的通信方式的特征的封装,包括传输协议、消息编码、通信模式、通信的安全要求等。本系统在绑定的配置选择了基于TCP作为传输协议的NetTcpBinding,其对应的编码格式为Binary,默认使用点到点的Transport安全。

WCF的服务是驻留在Windows进程中实现的,这种方式被称为寄宿。用于实现寄宿的进程可以由IIS或WAS提供,也可以是某个特定的应用程序提供。基于IIS寄宿所具备的自动化进程激活与关闭、自动化进程回收等优点,我们选择了IIS 7.0作为服务的寄宿方式。服务的终结点、行为及行为扩展等均配置在位于Web应用项目目录下的Web.config中。

IIS默认使用的是HTTP协议,为了实现对NetTcpBinding的支持,需要对IIS 7.0进行配置以完成对Net.Tcp协议的监听绑定。

4客户端实现

系统客户端的开发基于WPF完成,对于WCF服务的引用,一种最简单的方式在项目内通过添加服务引用的方式实现。然后基于引入的等效服务契约接口,创建单独的类型来封装所有的对服务端的服务调用,实现业务逻辑层及UI层即可。

5结语

通过实际开发应用,基于WCF的数据库操作及访问的服务发布,能够将数据库从开放网络中隔离出来,提高了数据库的安全性,消除客户端应用与数据库之间的耦合,并能很好地适应未来系统结构改变的需求,增强了系统结构的灵活性。

参考文献:

[1](美)Karli Watson.C#入门经典[M]. 6版.北京:清华大学出版社,2014.

[2](美)Juval L?wy,Michael Montgomery. WCF服务编程 [M]. 4版.武汉:华中科技大学出版社,2017.

[3]蒋金楠. WCF全面解析(上册) [M].北京:电子工业出版社,2012.

[4]蒋金楠. WCF全面解析(下册) [M].北京:电子工业出版社,2012.

[5](美)Steve Resnick. WCF核心技术[M].北京:人民邮电出版社,2009.

[6](美)Christian Nagel. C#高级编程[M]. 9版.北京:清华大学出版社,2014.

[7](美)Matthew MacDonald.WPF编程宝典 [M]. 4版.北京:清华大学出版社,2009.

[8](美)刘铁猛. 深入浅出WPF [M].北京:中国水利出版社,2010.

[9](美)Mark Michaelis. C#本质论 [M]. 2版.北京:人民邮电出版社,2009.

[10](美)Erik Freeman. Head First设计模式[M].北京:中国电力出版社,2007.

猜你喜欢

契约服务
一纸契约保权益
服务在身边 健康每一天
服务在身边 健康每一天
服务在身边 健康每一天
新疆发现契约文书与中古西域的契约实践
解放医生与契约精神