数据同步基础知识

Microsoft Sync Framework 通过使用三个基本组件来同步数据存储区或“副本”**:一个同步会话和两个同步提供程序。为了同步数据,应用程序创建一个同步会话,并向它传递一个源提供程序和一个目标提供程序。此会话使用源提供程序获取源副本中已发生的新变更,并使用目标提供程序将这些变更应用于目标副本。

创建提供程序占用了大多数的开发工作量。提供程序维护副本的元数据和知识,并为要同步的每个项维护元数据。提供程序还将实际项数据传入和传出其数据存储区。当提供程序充当源时,它将使用 Sync Framework 组件帮助枚举变更;当提供程序充当目标时,它将检测冲突并应用变更。

同步算法

用于单向同步的算法包含以下步骤:

  1. 会话获取目标副本的当前知识,并将其发送到源提供程序。

  2. 源提供程序枚举目标知识中未包含的变更。

  3. 源提供程序将变更发送到会话。

  4. 会话检测冲突,并通过目标提供程序将变更应用于目标副本。

两个副本之间的双向同步是通过两个单向同步实现的。

托管代码:当 Direction 属性设置为 DownloadAndUploadUploadAndDownload 时,SyncOrchestrator 对象执行两个单向同步。

非托管代码:应用程序必须为每个单向同步创建 ISyncSession 对象。

元数据管理

每个副本都必须向“同步社区”**提供一组描述其本身及其知识的元数据。(同步社区是可以彼此同步的一组副本。)每个副本所需的元数据为:副本 ID、当前滴答计数、副本键映射、当前知识、遗忘的知识、冲突日志和逻辑删除日志。副本还必须为要同步的每个项维护元数据。每个项所需的元数据为:全局 ID、当前版本和创建版本。通常,同步提供程序管理同步所需的元数据。然而,根据副本的实现,由单独的组件来处理元数据管理的某些部分可能更有用,例如,一项在预定时间(非不是在同步过程中)清除逻辑删除的服务。

有关元数据的更多信息,请参见元数据要求

同步提供程序

提供程序管理副本的元数据并使用 Sync Framework 来枚举变更和检测冲突。当此提供程序充当源提供程序时,它还使用副本的项存储区来发送项数据;当该提供程序充当目标提供程序时,它将应用变更。

托管代码:提供程序从 KnowledgeSyncProviderIChangeDataRetrieverINotifyingChangeApplierTarget 实现抽象方法和属性。

非托管代码:提供程序实现 IKnowledgeSyncProviderISyncProviderISynchronousDataRetrieverISynchronousNotifyingChangeApplierTarget 接口(或者,对于异步提供程序,则实现异步版本)。

有关同步提供程序以及如何实现和使用这些接口的更多信息,请参阅同步提供程序

同步应用程序

此应用程序是一个组件,它创建同步会话对象,将此对象与提供程序相连,并承载同步运行时。

使用托管代码实现同步应用程序

若要开始同步,请创建 SyncOrchestrator 对象。然后,将 LocalProviderRemoteProvider 属性设置为要同步的两个提供程序的 SyncProvider 接口。应用程序使用最适合的方法获取或创建提供程序接口。在创建 SyncOrchestrator 对象后,调用 Synchronize 以开始同步。此时,Sync Framework 对两个提供程序进行所有必要的调用以执行同步。

在同步过程中,SyncOrchestrator 对象和 KnowledgeSyncProvider 对象都将引发事件。若要接收事件,请实现一个事件处理程序方法,并进行注册以接收此事件。

使用非托管代码实现同步应用程序

若要开始同步,请通过将 CLSID_SyncServicesIID_IApplicationSyncServices 传递到 CoCreateInstance 函数以创建 ISyncSession 对象,然后对于返回的 IApplicationSyncServices 对象调用 IApplicationSyncServices::CreateSyncSession

CreateSyncSession 方法要求要同步的两个提供程序的 ISyncProvider 接口。应用程序使用最适合的方法获取或创建提供程序接口。在创建 ISyncSession 对象后,调用 ISyncSession::Start 以开始同步。此时,Sync Framework 对两个提供程序进行所有必要的调用以执行同步。

在同步过程中,ISyncSession 对象将引发事件。若要接收事件,请实现 ISyncCallback 接口并通过使用 ISyncSession::RegisterCallback 注册此接口。

请参阅

参考

ISyncSession 接口
ISyncProvider 接口
IKnowledgeSyncProvider 接口
ISynchronousDataRetriever 接口
ISynchronousNotifyingChangeApplierTarget 接口
IApplicationSyncServices 接口
IProviderSyncServices 接口
ISyncCallback 接口
SyncOrchestrator
KnowledgeSyncProvider
IChangeDataRetriever
INotifyingChangeApplierTarget
SyncCallbacks

概念

元数据要求
同步提供程序
同步应用程序

其他资源

Microsoft Sync Framework