应用WCF分布式框架实现移动数据同步

时间:2022-08-04 07:54:41

应用WCF分布式框架实现移动数据同步

フ 要:远程数据访问及合并复制同步方式存在数据安全性及不适合复杂网络环境的问题,而同步服务通过组件重构的方式实现数据同步,因此可以方便地将服务端同步组件和客户端同步组件分别部署。通过使用WCF封装服务端同步组件,可以使得服务端同步组件单独作为应用程序服务层为所有的客户端提供同步服务,从而解决了数据安全及复杂网络环境问题。可以自定义服务端同步适配器实现服务端和客户端之间的增量数据同步,利用同步服务冲突管理机制,又可以采用服务端优先或客户端优先方式解决数据冲突,从而给出一个完善的基于分布式框架的移动数据同步解决方案。

ス丶词:WCF;移动数据;数据同步

ブ型挤掷嗪: TP311 文献标志码:A

Abstract: Using remote data access and merge copy to synchronize data has some problems with data security and is unsuitable for complex network structure. Synchronization service realized data synchronization by the way of reconstructing synchronization components, so the server synchronization components and the client synchronization components could be deployed separately. To encapsulate server components by Windows Communication Foundation (WCF), the server components provided data synchronization service as an application service layer individually and the problems of data security and unsuitability for complex network structure caused by Remote Data Access (RDA) or merge copy could be resolved by this way. Incremental data synchronization can be applied by customizing data adapters and data conflicts can be resolved by data synchronization service conflict management mechanism using server priority or client priority, thus a perfect mobile data synchronization solution based on WCF distributed framework was established.

Key words: Windows Communication Foundation (WCF); mobile data; data synchronization

0 引言

近年来,移动通信在全球范围内迅猛发展,为移动应用提供了良好的通信基础设施平台和技术手段,3G的进一步发展将促进移动通信产业的整合,催生出丰富的移动应用模式。同时,嵌入式移动数据库使得人们可以通过PDA、智能手机、Pocket PC等移动终端产品离线访问数据,并在网络可用时与数据库服务器同步。这种方式最明显的优点是基于数据库的移动应用程序不需要固定的网络连接就可以通过访问本地数据库进行工作,克服了移动无线网络低带宽、长延迟、不稳定和经常性的断开的缺点。数据同步技术主要有远程数据访问(Remote Data Access,RDA)、合并复制、同步服务(Synchronization Services), 这几种主流技术都有各自的具体应用场景。本文主要讨论如何基于同步服务技术,应用WCF分布式框架实现移动数据同步。

1 移动数据同步技术比较

1.1 远程数据访问

远程数据访问(RDA)使移动应用程序能够访问远程服务器数据库中的数据,并将这些数据存储在移动设备的本地数据库中。随后该应用程序就可以读取和更新本地数据库中的数据。嵌入式移动数据库可以跟踪对本地表所做的更改,因此应用程序可以将本地更改过的记录更新回服务器数据库。在远程数据访问过程中将数据从服务器数据库传播至本地数据库的过程称为拉数据;将数据从本地数据库中所做的更改传播回服务器数据库的过程称为推数据。此外还有Submit SQL方法可直接向服务器数据库提交一组无返回行的命令执行语句。RDA可以实现简单的移动设备和数据库服务器的同步,但存在以下问题:

1)只能从数据库服务器下载完整的本地数据库快照,不能增量下载,同时若本地数据库和数据库服务器之间存在数据冲突,则只能以服务器版本优先,本地的修改被覆盖。

2)没有冲突管理机制,无法解决本地数据库和数据库服务器之间的数据冲突。

3)访问数据库服务器的登录安全凭据信息,必须由移动设备在发出同步请求时提供,并通过网络发送到服务器端,带来潜在的安全问题。

4)不适合复杂的网络环境应用,移动设备采用TCP/IP协议进行网络连接时,要求设备在联网时应具有固定的有效IP地址。若设备通过内网方式上网,此时设备只具有内网的私有IP地址,则与位于Internet网上的数据库服务器的网络通信不可进行。

1.2 合并复制

合并复制允许分别在移动设备的本地数据库和服务器数据库上更新数据。之后可以对该设备和服务器上的数据进行同步,以将客户端的更改发送到服务器,或从服务器接收新的更改[1-3]。服务器数据库称为者,移动设备的本地数据库称为订阅者。合并复制能够实现订阅者和者之间的双向数据交流,通过自动监视服务器和订阅服务器中数据的变化,定期将这些修改操作进行合并,并将合并的结果提交给订阅者,从而实现者和订阅者之间的数据同步。使用合并复制一般需要经过以下步骤:

1)在服务器数据库上创建本地,在此过程中需要指定类型、快照文件的共享路径、要的关系表,若要对表中的数据进行筛选,则定义筛选条件。

2)对步骤1)的创建的本地配置Web同步,此过程生成用于移动设备同数据库服务器进行Web同步的相关文件,并到IIS Web服务器中,同时配置访问Web服务器的相关权限。

3)在移动设备客户端代码中指定Web同步的URL地址(在步骤2)中配置)、者和订阅者的名称、登录服务器的安全凭据、调用数据同步方法。若存在冲突,则只能以服务器优先的模式解决冲突。

合并复制很好地解决了RDA同步方式存在的不能双向数据同步及缺少冲突管理机制的问题,但仍存在登录凭据安全及不适合复杂的网络环境的问题,且若移动客户端与数据库服务器存在数据冲突,只能以服务器优先的模式解决冲突,客户端的冲突数据被来自服务器的数据覆盖。

1.3 同步服务

同步服务包括服务器同步提供程序和同步适配器、客户端同步提供程序、同步、同步表和同步组等组件[4],用户可以根据应用程序的体系结构和数据同步要求对这些组件的全部或部分重构,从而实现客户端数据库和服务器数据库之间的数据同步,另外同步服务也支持客户端数据库同其他数据源,如XML服务之间的数据同步。同步服务使用中心辐射式模型。同步操作总是由客户端发起,来自每个客户端的所有更改首先与服务器进行同步,然后再从服务器发送到其他客户端。用户可根据不同的应用场景,指定客户端数据库与服务端数据库进行快照同步、仅下载同步、仅上载同步和双向同步。若要求在同步过程中实现增量同步和冲突检测,则必须对要同步的数据表添加标识列及相应的逻辑删除表,以标识服务端和客户端的数据的更改操作。

2 基于WCF的移动数据同步

2.1 分布式同步体系结构

服务端同步组件和客户端同步组件可以都部署在客户端,从而实现两层同步的体系结构,两层同步的体系结构仍然存在登录凭据安全及不适合复杂的网络环境的问题。由于同步服务通过组件重构的方式实现数据同步,因此可以方便地实现服务端同步组件和客户端同步组件的分别部署。可以将服务端同步组件用WCF服务进行封装,并部署到IIS Web服务器中,部署在移动设备上的客户端同步组件可通过Internet访问WCF的服务,执行服务端的同步操作,从而实现分布式同步体系结构。用于分布式同步体系结构实现移动数据同步的系统框架如图1所示。

WCF作为基于面向服务的体系结构(ServiceOriented Architecture,SOA)标准的分布式应用程序开发模型,采用服务契约(接口)向消费者提供服务,通过服务的实现与服务的内容分离,可以轻松构建松耦合的分布式应用。WCF客户端与服务器的通信是基于简单对象访问协议(Simple Object Access Protocol,SOAP)进行的,这就保证了系统之间的互操作性,只要系统支持标准的Web Service,就可以进行跨进程、跨机器甚至于跨平台的通信。可以在SOAP消息中定义WSSecurity、WSTrust、WSSecureConversation,从而实现客户端和服务端通信时有关用户认证、数据完整性、数据机密性等安全要求,而在SOAP的包头中增加WSReliableMessaging则允许可信赖的端对端通信,建立在WSCoordination和WSAtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交,上述的多种WSPolicy在WCF中都给予了支持[5-7]。通过使用 WCF封装服务端同步组件,可以使服务端同步组件独立出来,单独作为应用程序服务层为所有的数据同步客户端提供服务。这样做的好处是:首先访问数据库服务器的登录凭据信息只需要在服务端同步组件中保留一个副本,且服务端同步组件在和数据库服务器进行通信时,可以使用WCF在通信安全方面的支持,从而保证登录凭据及数据的安全。其次由于WCF服务端和客户端采用SOAP协议交换信息,因此无论客户端的移动设备采用何种方式(方式、无线方式)上网,只要能通过Internet连接上承载WCF服务的IIS Web 服务器,就能访问由WCF封装的服务端同步组件,从而实现移动设备和数据库服务器的数据同步。若是双向数据同步,由于客户端的服务器和防火墙不会拦截从服务端发送给客户端的SOAP包,因此,移动设备的客户端同步组件可将来自服务端的数据更新到本地数据库。

基于WCF的分布式框架实现移动数据同步的过程为:1)在客户端同步提供程序中定义如何连接到移动设备的本地数据库。2)在客户端的同步类中定义要同步的数据表;同步的方式(快照同步、仅下载同步、仅上载同步和双向同步);若要同步多个数据表,且要求在同一个事务中完成,则将这些表定义在同一个同步组中;若只需要从数据库服务器的对应数据表中取部分数据作为同步对象,则在此定义筛选参数;以Web的方式引用WCF封装的服务端同步组件,并指定其在移动客户端缓存的Proxy Service为同步的RemoteProvider;定义数据冲突时客户端的处理事件及处理方式。3)在服务端的同步适配器中定义与客户端同步数据表相关的数据更新命令、增量更新命令、冲突处理命令;若客户端类中定义了筛选参数,则需要为对应的数据更新命令、增量更新命令、冲突处理命令根据筛选参数定义筛选表达式;定义数据冲突时服务端的处理事件及处理方式。4)移动设备客户端调用同步类发起同步请求,同步完成后,相关统计信息返回到客户端。

2.2 增量同步

服务端和客户端在完成首次同步后,以后的数据同步是以增量方式完成的。增量数据同步的过程是,先检查自上次同步后客户端的修改,将客户端的更新应用到服务端,然后增量下载服务端的更新,将服务端的更新应用到客户端。为实现增量数据同步,需要对服务端的数据表进行改造,改造Product表的过程如表1~3所示。

改造后的服务端Product表及对应的逻辑删除表中LastEditDate、CreateDate、DeleteDate值由触发器记录行数据的修改、插入、删除的时间戳[8]。移动设备客户端的Product表的改造由同步服务内在机制自动完成。服务端和客户端在进行数据同步时,同步服务对与同步相关的会话变量赋值。其中:

@sync_last_received_anchor表示上次同步结束的时间戳,每次数据同步完成后,在客户端保留。

@sync_new_received_anchor表示本次同步开始的时间戳,一般情况可以设置@sync_new_received_anchor=GETUTCDATE()。

@sync_client_id表示每次同步会话期间同步服务分配给客户端的GUID。

以客户端及服务端自上次同步完成后,各插入一条新数据为例,双向增量同步的算法描述为:

程序前

BiDicInsert()

{分别为会话变量@sync_last_received_anchor,@sync_new_received_anchor,@sync_client_id赋值;

SyncAgent.Synchronize()//同步发起同步

//同步第一阶段,调用服务端提供程序的插入命令将取客户端的

//更新应用到服务端

Insert Product(ID,Name,Price, UpdateId,InsetId) Values(@ID,@Name,@Price,@sync_client_id,@sync_client_id);

//同步第二阶段,调用服务端提供程序的取增量插入命令,同步

//将服务端的更新应用到客户端

SELECT ID, name, Price FROM Product WHERE CreationDate > @sync_last_received_anchor AND CreationDate

}

程序后

特别注意,之所以设置InsertId @sync_client_id限定条件,是为了避免第一阶段由客户端插入到服务端的数据,在第二阶段又作为服务端的更新数据返回到客户端。

2.3 冲突处理

当多个客户端同步服务端相同的数据副本时,不可避免地会发生冲突。例如:

1)客户端 A 和客户端 B 与服务器同步。

2)在客户端 A 上更新了某行,然后对客户端 A 进行同步。此时不会出现任何冲突,会在服务器上应用该行。

3)在客户端 B 上更新同一行,然后对客户端 B 进行同步。现在,来自客户端 B 的该行与服务器上的该行发生了冲突,因为客户端 A 已对该行进行了更新。

4)如果以服务器优先的方式解决此冲突,同步服务会将服务器上的该行应用于客户端 B。如果以客户端 B优先的方式解决冲突,则同步会将来自客户端 B 的该行应用于服务器。在客户端 A 与服务器进行下一次同步时,源自客户端 B 的更新将应用于客户端 A。

典型的冲突类型的冲突类型有:

ClientInsertServerInsert表示客户端和服务端同时插入具有相同主键的行;ClientUpdateServerDelete表示客户端更新某行,而具有相同主键的行在服务端被删除;ClientDeleteServerUpdate表示客户端删除某行,而具有相同主键的行在服务端被更新;ClientUpdateServerUpdate表示客户端和服务端同时更新了具有相同主键的行。

现假设客户端与服务端同步Product表,同步初始化后,Product表在服务端和客户端的状态如表4所示。在服务端和客户端分别进行以下是数据操作。

1)在服务端插入数据:Insert Product values(4,′Icebox′,1500),在客户端插入数据:Insert Product values(4,′Washer′,1600),导致ClientInsertServerInsert冲突。若以服务端优先处理冲突,则客户端的插入被来至服务端的插入覆盖,结果见表5。若以客户端优先,则服务端的插入被来至客户端的插入覆盖,结果见表6。

2)服务端删除数据:delete Product where ID=2,在客户端修改数据:Update Product set Price = 4500 where ID=2,导致ClientUpdateServerDelete冲突。若以服务端优先处理冲突,则ID=2的记录在服务端和客户端都被删除,将结果见表5。若以客户端优先,则客户端ID=2的记录被删除,服务端为ID=2在客户端被修改后的结果,结果见表6。这是因为在同步的第一阶段,客户端的更新上传到服务端,客户端对Product表中ID=2的修改被应用到服务端(2,Laptop,4B500)。在同步的第二阶段,服务端的更新下载到客户端,由于服务端对ID=2的删除是发生在上次同步后,服务端组件中的同步适配器会以取增量删除的方式下载该删除记录至客户端,然后在客户端删除ID=2的记录。

3)服务端更新数据:update Product set Price = 650 where ID=3,在客户端删除数据:delete Product where ID=3,导致ClientDeleteServerUpdate冲突。若以服务端优先处理冲突,则服务端和客户端均为服务端的更新结果(3,Phone,650),结果见表5。若以客户端优先,则ID=3的记录在服务端及客户端均被删除,结果见表6。

4)服务端更新数据:update Product set Price = 2100 Where ID=1,在客户端更新数据:update Product set Price = 2B200 where ID=1,导致ClientUpdateServerUpdate冲突,以ClientInsertServerInsert相同方式处理冲突。

实际应用中,可根据业务逻辑及具体应用场景选择冲突处理方式,解决数据同步过程中产生的冲突。

3 结语

随着移动设备的硬件性能的不断提高,基于桌面系统的数据库应用程序正越来越多地移植到移动设备中,移动办公在给人们带来方便的同时,必须要解决的问题就是如何实现移动设备客户端与服务端的数据同步。本文结合WCF、同步服务等相关技术,给出了一个基于WCF的分布式移动数据同步解决方案。在银行基金代销系统中,基金代销人员需要经常上门拜访客户,因此在必要时需将服务器中的数据下载到移动设备,以便向客户介绍基金的情况,若基金销售成功,又需要将记录在本地数据库的基金销售信息在网络可用时同步到服务器。应用本方案成功解决了基金代销系统的数据同步问题,并取得了良好的效果。

げ慰嘉南:

[1] 王文琴, 费贤举, 鞠时光. 基于数据复制技术实现移动数据同步[J]. 计算机应用, 2006, 26(7): 1676-1678.

[2] 索红光, 王雷全. 智能客户端系统中数据同步策略的研究与实现[J]. 计算机工程与设计,2007,28(2): 351-353.

[3] 李艳, 蓝雯飞. 移动数据库中数据同步技术[J]. 重庆科技学院学报:自然科学版, 2008, 10(6): 112-114.

[4] 高艳宏, 马光恩. 基于Sync Services for 的智能客户端应用研究[J]. 计算机技术与发展,2010, 20(10): 224-227.

[5] 严商, 黄樟灿. WCF:Windows平台新一代通信基础研究与分析[J]. 计算机与数字工程, 2008, 36(4): 86-89.

[6] 韩旭, 王海波, 柳克俊. 基于.NET Framework WCF的面向服务SOA中间件设计[J]. 小型微型计算机系统, 2010, 31(12): 2359-2363.

[7] 吴莉. 基于.NET框架的N层分布式应用程序研究[J]. 贵州工业大学学报:自然科学版, 2008, 37(4): 207-210.

[8] 杨志和, 胡虚怀. 移动环境下的数据同步模型研究[J]. 计算机工程与应用, 2007, 43(13): 191-193.

上一篇:炫彩缤纷 史无前例 下一篇:微博热议 阿里巴巴B2B公司高管离职