Sync Framework 核心组件
可以通过非托管语言使用 Sync Framework 核心组件来执行同步。这些组件可用于管理元数据以及创建同步提供程序和应用程序。
结构、枚举和标志
下表列出了 Sync Framework 定义的结构、枚举和标志组,以及通常与每个组件相关联的功能。
组件 | 关联的功能 |
---|---|
元数据 |
|
元数据 |
|
筛选 |
|
元数据 |
|
元数据 |
|
元数据 |
|
会话 |
|
元数据 |
|
变更应用服务 |
|
约束冲突 |
|
并发冲突 |
|
约束冲突 |
|
筛选 |
|
筛选 |
|
元数据 |
|
约束冲突 |
|
恢复同步 |
|
应用程序回调 |
|
应用程序回调 |
|
并发冲突 |
|
变更应用 |
|
版本控制 |
|
元数据 |
|
元数据 |
|
筛选 |
|
元数据 |
由 Sync Framework 实现的接口
以下接口由 Sync Framework 实现。
工厂接口
以下接口主要用于创建其他 Sync Framework 组件。通过将 CLSID_SyncServices 和指定的 IID 传递到 CoCreateInstance,可以创建这些接口。
接口 | IID |
---|---|
IID_IApplicationSyncServices |
|
IID_IClockVectorServices |
|
IID_IProviderCustomFilteredSyncServices |
|
IID_IProviderFilteredSyncServices |
|
IID_IProviderFilteredSyncServices2 |
|
IID_IProviderSyncServices |
|
IID_IProviderSyncServices2 |
变更批接口
以下接口表示一个变更批。通过将指定的 IID 传递到任何其他接口的 QueryInterface 方法,可以获取每个接口。某些接口仅在满足指定条件时才能实现。
接口 | IID | 条件 |
---|---|---|
IID_ISyncChangeBatch |
变更批不能是恢复同步的组成部分。 |
|
IID_ISyncChangeBatch2 |
始终。 |
|
IID_ISyncChangeBatchAdvanced |
始终。 |
|
IID_ISyncChangeBatchBase |
始终。 |
|
IID_ISyncChangeBatchBase2 |
始终。 |
|
IID_ISyncChangeBatchWithFilterKeyMap |
始终。 |
|
IID_ISyncChangeBatchWithPrerequisite |
始终。 |
|
IID_ISyncFullEnumerationChangeBatch |
变更批必须是恢复同步的组成部分。 |
|
IID_ISyncFullEnumerationChangeBatch2 |
变更批必须是恢复同步的组成部分。 |
以下接口表示一个变更。通过将指定的 IID 传递到任何其他接口的 QueryInterface 方法,可以获取每个接口。
接口 | IID |
---|---|
IID_ISyncChange |
|
IID_ISyncChangeWithFilterKeyMap |
|
IID_ISyncChangeWithPrerequisite |
|
IID_ISyncFullEnumerationChange |
|
IID_ISyncMergeTombstoneChange |
以下接口用于将其他信息添加到 ISyncChange 对象。通过使用指定的机制,可以获取每个接口。
接口 | 获取方式 |
---|---|
将 IID_IFilterTrackingSyncChangeBuilder 传递到 ISyncChangeBuilder 对象的 QueryInterface 方法。 |
|
由各种方法(如 ISyncChangeBatchBase::AddItemMetadataToGroup)返回。 |
以下接口用于处理变更单位。通过使用指定的机制,可以获取每个接口。
接口 | 获取方式 |
---|---|
调用一个方法,如 ISyncChange::GetChangeUnits。 |
以下接口用于构建或枚举变更列表。通过使用指定的机制,可以获取每个接口。
接口 | 获取方式 |
---|---|
调用 IProviderSyncServices::CreateDestinationChangeVersionsBuilder。 |
|
将 IID_IDestinationChangeVersionsBuilder2 传递到 IDestinationChangeVersionsBuilder 对象的 QueryInterface 方法。 |
|
调用 ISyncChangeBatchBase::GetChangeEnumerator 或 IDestinationChangeVersionsBuilder::GetChangeEnumerator。 |
|
将 IID_IFilterTrackingSyncChangeBuilder 传递到 IDestinationChangeVersionsBuilder 对象的 QueryInterface 方法。 |
变更应用方接口
目标提供程序可使用以下接口来帮助处理冲突和应用变更。
通过将指定的 IID 传递到下表中任何其他接口的 IProviderSyncServices::CreateChangeApplier 方法或 QueryInterface 方法,可以获取下表中的任何接口。
接口 | IID |
---|---|
IID_IAsynchronousNotifyingChangeApplier |
|
IID_ISynchronousNotifyingChangeApplier |
|
IID_ISynchronousNotifyingChangeApplier2 |
变更应用方通过调用 IAsynchronousNotifyingChangeApplierTarget::RegisterCallback 将以下接口注册到目标提供程序。
接口 | IID |
---|---|
IID_IAsynchronousNotifyingChangeApplierTargetCallback |
在冲突检测和应用变更期间,变更应用方和提供程序之间通过以下接口进行通信。通过使用指定的机制,可以获取每个接口。
接口 | 获取方式 |
---|---|
传递到相关方法,如 ISynchronousDataRetriever::LoadChangeData。 |
|
将 IID_IFilterTrackingSaveChangeContext 传递到 ISaveChangeContext 或 ISaveChangeWithChangeUnitsContext 对象的 QueryInterface 方法。 |
|
调用 IProviderSyncServices::CreateRecoverableErrorData、IRecoverableError::GetRecoverableErrorDataForChange 或 IRecoverableError::GetRecoverableErrorDataForChangeUnit。 |
|
传递到 ISynchronousNotifyingChangeApplierTarget::SaveChange 和 IAsynchronousNotifyingChangeApplierTarget::SaveChange。 |
|
将 IID_ISaveChangeContext2 传递到 ISaveChangeContext 对象的 QueryInterface 方法。 |
|
传递到 ISynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits 和 IAsynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits。 |
|
将 IID_ISaveChangeWithChangeUnitsContext2 传递到 ISaveChangeWithChangeUnitsContext 对象的 QueryInterface 方法。 |
|
当需要更大的灵活性时,可使用以下接口代替标准变更应用方。通过使用指定的机制获取每个接口。
接口 | 获取方式 |
---|---|
将 IID_IChangeApplicationServices 传递到 IProviderSyncServices::CreateChangeApplier。 |
冲突记录
以下接口用于记录冲突。通过使用指定的机制,可以获取每个接口。
接口 | 获取方式 |
---|---|
可以由提供程序实现,也可以通过将 IID_IConflictLogAccess 传递到 IMemoryConflictLog 对象的 QueryInterface 方法来获取。 |
|
可以由提供程序实现,也可以通过将 IID_IConflictLogWriter 传递到 IMemoryConflictLog 对象的 QueryInterface 方法来获取。 |
|
调用 IProviderSyncServices2::CreateLoggedConflictsEnumBuilder。 |
|
筛选
以下接口表示有关用于控制将哪些数据包括在同步范围内的筛选器的信息。通过使用指定的机制,可以获取每个接口。
接口 | 获取方式 |
---|---|
将 SYNC_FILTER_INFO_FLAG_CHANGE_UNIT_LIST 标志传递到 IProviderFilteredSyncServices::CreateFilterInfo,然后将 IID_IChangeUnitListFilterInfo 传递到返回的 ISyncFilterInfo 对象的 QueryInterface 方法。 |
|
调用 IProviderCustomFilteredSyncServices::CreateCombinedFilterInfo。 |
|
调用 IProviderCustomFilteredSyncServices::CreateCustomFilterInfo。 |
|
调用 IProviderCustomFilteredSyncServices::CreateFilterKeyMap 或 ISyncChangeBatchWithFilterKeyMap::GetFilterKeyMap。 |
|
将 IID_ISyncFilterInfo2 传递到 ISyncFilterInfo 对象的 QueryInterface 方法。 |
知识元数据
以下接口表示一个知识对象。通过将指定的 IID 传递到下表中的任何其他接口的 QueryInterface 方法,可以获取下表中的任何接口。请注意,当知识对象的最低支持版本不是预期值时,某些接口上的一些方法将失败,例如,当最低支持版本不是 SYNC_SERIALIZATION_VERSION_V1 时,ISyncKnowledge::GetSingleItemExceptions 将失败。此外,一些方法将会变更最低支持版本,例如,IKnowledgeWithMarkers::AddAllChangeUnitsRequiredMarker 会将最低支持版本设置为 SYNC_SERIALIZATION_VERSION_V3。有关需要的或设置的最低支持版本的详细信息,请参阅每个方法的参考文档。
接口 | IID |
---|---|
IID_ISyncKnowledge |
|
IID_ISyncKnowledge2 |
|
IID_IKnowledgeWithMarkers |
|
IID_IForgottenKnowledge |
以下接口表示其最低支持版本为 SYNC_SERIALIZATION_VERSION_V1 的知识对象的组件。通过调用 ISyncKnowledge2::GetMinimumSupportedVersion,可以获取知识对象的最低支持版本。通过调用指定的方法,可以获取每个接口。
接口 | 获取该接口需要调用的方法 |
---|---|
以下接口表示知识对象的所有版本的组件。通过调用指定的方法,可以获取每个接口。
接口 | 获取该接口需要调用的方法 |
---|---|
ISyncKnowledge::FindClockVectorForItem 或ISyncKnowledge::FindClockVectorForChangeUnit |
|
IProviderSyncServices::CreateReplicaKeyMap 或 ISyncKnowledge::GetReplicaKeyMap。 |
以下接口用于检查或构建知识对象。通过使用指定的机制,可以获取每个接口。
接口 | 获取方式 |
---|---|
将 IID_IConstructReplicaKeyMap 传递到 IReplicaKeyMap 对象的 QueryInterface 方法。 |
|
将 IID_ICoreFragmentInspector 传递到 ISyncKnowledge2::GetInspector。 |
|
将 IID_IKnowledgeBuilder2 传递到 IKnowledgeBuilder 对象的 QueryInterface 方法。 |
会话接口
同步应用程序使用以下接口来启动同步会话和检索有关会话的信息。通过使用指定的机制,可以获取每个接口。
接口 | 获取方式 |
---|---|
将 IID_ISyncSessionExtendedErrorInfo 传递到 ISyncSession 对象的 QueryInterface 方法。 |
|
调用 IProviderSyncServices2::CreateSyncSessionState。也由 Sync Framework 传递到 IKnowledgeSyncProvider::BeginSession 和 IKnowledgeSyncProvider::EndSession。 |
|
将 IID_ISyncSessionState2 传递到 ISyncSessionState 对象的 QueryInterface 方法。 |
|
将 IID_ISyncDataConversionControl 传递到 ISyncSessionState 对象的 QueryInterface 方法。 |
应用程序回调数据接口
Sync Framework 通过使用指定的回调方法,将以下接口传递到同步应用程序。
接口 | 回调方法 |
---|---|
其他接口
以下接口用于注册提供程序转换器。通过调用指定的方法,可以获取该接口。
接口 | 获取该接口需要调用的方法 |
---|---|
由同步提供程序实现
以下接口由同步提供程序实现。
提供程序接口
下面的每个接口都必须由 ISyncProvider 对象的 QueryInterface 方法在接收指定的 IID 时返回。同步应用程序通过使用 IApplicationSyncServices::CreateSyncSession 将这些接口传递到同步会话。
接口 | IID |
---|---|
IID_IKnowledgeSyncProvider |
|
IID_ISyncProvider |
|
IID_IFilterTrackingProvider |
|
IID_IRequestFilteredSync |
|
IID_ISupportFilteredSync |
变更应用方目标接口
以下接口由使用同步变更应用方的目标提供程序实现。每个实现的接口都必须由 ISynchronousNotifyingChangeApplierTarget 对象的 QueryInterface 方法在接收指定的 IID 时返回。通过使用一个方法(如 ISynchronousNotifyingChangeApplier::ApplyChanges),将这些接口传递到变更应用方组件。
接口 | IID |
---|---|
IID_ISynchronousNotifyingChangeApplierTarget |
|
IID_ISynchronousNotifyingChangeApplierTarget2 |
|
IID_IFilteredReplicaNotifyingChangeApplierTarget |
|
IID_IFilterTrackingNotifyingChangeApplierTarget |
以下接口由使用异步变更应用方的目标提供程序实现。通过使用一个方法(如 IAsynchronousNotifyingChangeApplier::ApplyChanges),将此接口传递到变更应用方组件。
接口 | IID |
---|---|
IID_IAsynchronousNotifyingChangeApplierTarget |
数据检索器接口
以下接口由使用变更应用方的目标提供程序实现。通过使用一个方法(如指定的方法),将这些接口传递到变更应用方组件。
接口 | 方法 |
---|---|
其他提供程序接口
以下接口由提供程序实现,以便能使用各种功能(如筛选或数据转换)。通过使用指定的机制,将此接口传递到 Sync Framework。
接口 | 机制 |
---|---|
由一个方法返回,如 IFilteredReplicaNotifyingChangeApplierTarget::GetNewMoveins。 |
|
传递到 IProviderConverterRegistration::RegisterProviderConverter。 |
|
在 IID_ISupportLastWriteTime 传递到数据检索器对象的 QueryInterface 时返回。通常,这是一个 ISynchronousDataRetriever 对象。 |
|
传递到 ISyncDataConversionControl::SetSourceDataConverter 或 ISyncDataConversionControl::SetDestinationDataConverter。 |
|
传递到相关方法,如 IProviderCustomFilteredSyncServices::CreateCustomFilterInfo 或 IFilterKeyMap::AddFilter。 |
|
传递到 IProviderCustomFilteredSyncServices::DeserializeFilterKeyMap 或 IProviderCustomFilteredSyncServices::DeserializeChangeBatchWithFilterKeyMap。 |
由同步应用程序实现
以下接口由同步应用程序实现,以接收同步期间所发生事件的通知。Sync Framework 通过将指定的 IID 传递到 ISyncCallback 接口(已传递给 ISyncSession::RegisterCallback)的 QueryInterface 方法,来获取这些接口。
接口 | IID |
---|---|
IID_ISyncCallback |
|
IID_ISyncCallback2 |
|
IID_ISyncConstraintCallback |
错误代码
Sync Framework 使用一组自定义错误来报告问题。有关详细信息,请参阅 Sync Framework 错误代码。
请参阅
概念
Sync Framework 非托管 API
Microsoft Sync Framework
自定义提供程序的基础知识
管理标准提供程序的元数据
实现标准自定义提供程序
实现同步应用程序