技术开发 频道

处理微软MSF同步框架中的数据冲突

【IT168 技术文章】

 如果你刚刚接触微软同步框架,你可以通过本文开始学习,在下面的示例中,我们假设你已经对MSF框架有所了解。

    首先,我们需要理解什么是数据冲突,它是怎么产生的。图1显示了最常见的数据冲突,当两个源同时更新一行数据时的情况。例如,假设有两个客户端(客户端A和客户端B)更新了本地数据缓存,然后同时同步到同一个服务器,此时客户端A和B接收到的是表x的同一个拷贝,客户端A更新了表x中第17行的电话号码,然后同步回服务器,与此同时,客户端B更新了表x中第17行的email地址,当客户端B同步回服务器时,冲突就发生了,此时服务器要决定究竟那个要写入主拷贝中。象这样的例子在应用程序逻辑中也存在,MSF提供了两个不同的方法来定义这个逻辑。

图- 1 常见的同步冲突实例

    冲突类型和解决办法

    MSF定义了五个不同的冲突类型,它定义为ConflictType枚举量:

    ◆ ClientInsertServerInsert 以相同的主键创建一个新行。

    ◆ ClientUpdateServerUpdate 相同的行被更新,这是最常见的冲突,如图1所示。

    ◆ ClientUpdateServerDelete 在客户端更新的行,但在服务器上已经被删除了。

    ◆ ClientDeleteServerUpdate 在客户端删除的行,但在服务器上已经更新了。

    ◆ ErrorsOccurred 当发生错误时使用“catch all”(停止一切)预防行被插入、更新或删除。

    当你看了图1中的例子后,你可能会认为只有当同步计划是双向的时候才会引发冲突,但并不仅仅是这样。设想一个只上载的情况,客户端不关心在服务器上的更新,它只是想将新的信息提交给服务器,该客户端会创建一行数据并同步到客户端。在某些情况下,有些讨厌的用户会打乱服务器判断数据行的行为,可能造成服务器认为这一行数据不再需要,因此将其删除了。在那个时候,客户端会对那一行做出修改并同步回服务器,但这也会造成冲突,因为客户端更新的行,在服务器上已经被删除了。这种情况下,只有将更新操作改为插入操作才能解决这个冲突。

0
相关文章