Componentes principales de Sync Framework
Los componentes principales de Sync Framework se pueden usar desde un lenguaje no administrado para realizar la sincronización. Estos componentes se pueden usar para administrar metadatos y para crear proveedores y aplicaciones de sincronización.
Estructuras, enumeraciones y marcas
En la tabla siguiente se enumeran las estructuras, enumeraciones y conjuntos de marcas que define Sync Framework, así como las características con las que normalmente se asocia cada componente.
Componente | Característica asociada |
---|---|
Metadatos |
|
Metadatos |
|
Filtro |
|
Metadatos |
|
Metadatos |
|
Metadatos |
|
Sesión |
|
Metadatos |
|
Servicio de aplicación de cambios |
|
Conflictos de restricción |
|
Conflictos de simultaneidad |
|
Conflictos de restricción |
|
Filtro |
|
Filtro |
|
Metadatos |
|
Conflictos de restricción |
|
Sincronización de recuperación |
|
Devolución de llamada de la aplicación |
|
Devolución de llamada de la aplicación |
|
Conflictos de simultaneidad |
|
Aplicación de cambios |
|
Control de versiones |
|
Metadatos |
|
Metadatos |
|
Filtro |
|
Metadatos |
Interfaces que implementa Sync Framework
Sync Framework implementa las interfaces siguientes.
Interfaces de fábrica
Las interfaces siguientes se utilizan principalmente para crear otros componentes de Sync Framework. Cada una de estas interfaces se puede crear pasando CLSID_SyncServices y el identificador de interfaz especificado a CoCreateInstance.
Interfaz | Identificador de interfaz |
---|---|
IID_IApplicationSyncServices |
|
IID_IClockVectorServices |
|
IID_IProviderCustomFilteredSyncServices |
|
IID_IProviderFilteredSyncServices |
|
IID_IProviderFilteredSyncServices2 |
|
IID_IProviderSyncServices |
|
IID_IProviderSyncServices2 |
Interfaces de lote de cambios
Las interfaces siguientes representan un lote de cambios. Cada interfaz se puede obtener pasando el identificador de interfaz especificado al método QueryInterface de cualquier otra interfaz. Algunas interfaces solo se implementan cuando se cumplen las condiciones especificadas.
Interfaz | Identificador de interfaz | Condición |
---|---|---|
IID_ISyncChangeBatch |
El lote de cambios no puede formar parte de una sincronización de recuperación. |
|
IID_ISyncChangeBatch2 |
Siempre. |
|
IID_ISyncChangeBatchAdvanced |
Siempre. |
|
IID_ISyncChangeBatchBase |
Siempre. |
|
IID_ISyncChangeBatchBase2 |
Siempre. |
|
IID_ISyncChangeBatchWithFilterKeyMap |
Siempre. |
|
IID_ISyncChangeBatchWithPrerequisite |
Siempre. |
|
IID_ISyncFullEnumerationChangeBatch |
El lote de cambios debe formar parte de una sincronización de recuperación. |
|
IID_ISyncFullEnumerationChangeBatch2 |
El lote de cambios debe formar parte de una sincronización de recuperación. |
Las interfaces siguientes representan un único cambio. Cada interfaz se puede obtener pasando el identificador de interfaz especificado al método QueryInterface de cualquier otra interfaz.
Interfaz | Identificador de interfaz |
---|---|
IID_ISyncChange |
|
IID_ISyncChangeWithFilterKeyMap |
|
IID_ISyncChangeWithPrerequisite |
|
IID_ISyncFullEnumerationChange |
|
IID_ISyncMergeTombstoneChange |
Las interfaces siguientes se utilizan para agregar información adicional a un objeto de ISyncChange. Cada interfaz se puede obtener mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Al pasar IID_IFilterTrackingSyncChangeBuilder al método QueryInterface de un objeto de ISyncChangeBuilder. |
|
Se devuelve en varios métodos, como ISyncChangeBatchBase::AddItemMetadataToGroup. |
Las interfaces siguientes se utilizan para administrar las unidades de cambio. Cada interfaz se puede obtener mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Al llamar a IEnumSyncChangeUnits::Next. |
|
Al llamar a un método como ISyncChange::GetChangeUnits. |
Las interfaces siguientes se utilizan para generar o enumerar una lista de cambios. Cada interfaz se puede obtener mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Al llamar a IProviderSyncServices::CreateDestinationChangeVersionsBuilder. |
|
Al pasar IID_IDestinationChangeVersionsBuilder2 al método QueryInterface de un objeto de IDestinationChangeVersionsBuilder. |
|
Al llamar a ISyncChangeBatchBase::GetChangeEnumerator o IDestinationChangeVersionsBuilder::GetChangeEnumerator. |
|
Al pasar IID_IFilterTrackingSyncChangeBuilder al método QueryInterface de un objeto de IDestinationChangeVersionsBuilder. |
Interfaces de aplicador de cambios
El proveedor de destino puede utilizar las interfaces siguientes para ayudar a administrar los conflictos y a aplicar cambios.
Cualquiera de las interfaces de la tabla siguiente se puede obtener pasando el identificador de interfaz especificado al método IProviderSyncServices::CreateChangeApplier o al método QueryInterface de cualquiera de las otras interfaces de la tabla.
Interfaz | Identificador de interfaz |
---|---|
IID_IAsynchronousNotifyingChangeApplier |
|
IID_ISynchronousNotifyingChangeApplier |
|
IID_ISynchronousNotifyingChangeApplier2 |
El aplicador de cambios registra lo siguiente de la interfaz con el proveedor de destino mediante una llamada a IAsynchronousNotifyingChangeApplierTarget::RegisterCallback.
Interfaz | Identificador de interfaz |
---|---|
IID_IAsynchronousNotifyingChangeApplierTargetCallback |
Las interfaces siguientes se utilizan para la comunicación entre el aplicador de cambios y un proveedor durante la detección de conflictos y la aplicación de cambios. Cada interfaz se puede obtener mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Se pasa a métodos como ISynchronousDataRetriever::LoadChangeData. |
|
Al pasar IID_IFilterTrackingSaveChangeContext al método QueryInterface de un objeto de ISaveChangeContext o un objeto de ISaveChangeWithChangeUnitsContext. |
|
Al llamar al método IProviderSyncServices::CreateRecoverableErrorData, IRecoverableError::GetRecoverableErrorDataForChange o IRecoverableError::GetRecoverableErrorDataForChangeUnit. |
|
Se pasa a ISynchronousNotifyingChangeApplierTarget::SaveChange y a IAsynchronousNotifyingChangeApplierTarget::SaveChange. |
|
Al pasar IID_ISaveChangeContext2 al método QueryInterface de un objeto de ISaveChangeContext. |
|
Se pasa a ISynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits y a IAsynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits. |
|
Al pasar IID_ISaveChangeWithChangeUnitsContext2 al método QueryInterface de un objeto de ISaveChangeWithChangeUnitsContext. |
|
Se pasa a IAsynchronousDataRetriever::RegisterCallback. |
Las interfaces siguientes se pueden utilizar en lugar de un aplicador de cambios estándar cuando se requiere mayor flexibilidad. Cada interfaz se obtiene mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Al llamar a IChangeApplicationServices::GetChangeApplicationContext. |
|
Al pasar IID_IChangeApplicationServices a IProviderSyncServices::CreateChangeApplier. |
Registro de conflictos
Las interfaces siguientes se utilizan para registrar conflictos. Cada interfaz se puede obtener mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Puede implementarla un proveedor o se puede obtener pasando IID_IConflictLogAccess al método QueryInterface de un objeto de IMemoryConflictLog. |
|
Puede implementarla un proveedor o se puede obtener pasando IID_IConflictLogWriter al método QueryInterface de un objeto de IMemoryConflictLog. |
|
Al llamar a IEnumLoggedConflictsBuilder::GetChangeEnumerator. |
|
Al llamar a IProviderSyncServices2::CreateLoggedConflictsEnumBuilder. |
|
Al llamar a IProviderSyncServices2::CreateLoggedConflict. |
|
Al llamar a IProviderSyncServices2::CreateMemoryConflictLog. |
Filtro
Las interfaces siguientes representan información sobre los filtros que se utilizan para controlar los datos que se incluyen en el ámbito de sincronización. Cada interfaz se puede obtener mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Al pasar la marca SYNC_FILTER_INFO_FLAG_CHANGE_UNIT_LIST al método IProviderFilteredSyncServices::CreateFilterInfo y después pasar IID_IChangeUnitListFilterInfo al método QueryInterface del objeto de ISyncFilterInfo devuelto. |
|
Al llamar a IProviderCustomFilteredSyncServices::CreateCombinedFilterInfo. |
|
Al llamar a IProviderCustomFilteredSyncServices::CreateCustomFilterInfo. |
|
Al llamar a IProviderCustomFilteredSyncServices::CreateFilterKeyMap o ISyncChangeBatchWithFilterKeyMap::GetFilterKeyMap. |
|
Se pasa a IRequestFilteredSync::SpecifyFilter. |
|
Al llamar a métodos como IProviderFilteredSyncServices::CreateFilterInfo. |
|
Al pasar IID_ISyncFilterInfo2 al método QueryInterface de un objeto de ISyncFilterInfo. |
Metadatos de conocimiento
Las interfaces siguientes representan un objeto de conocimiento. Cualquiera de las interfaces de la tabla se puede obtener pasando el identificador de interfaz especificado al método QueryInterface de cualquiera de las otras interfaces de la tabla. Tenga en cuenta que se producirá un error en algunos métodos de algunas interfaces cuando la versión mínima admitida del objeto de conocimiento no tenga el valor esperado, como sucede con el método ISyncKnowledge::GetSingleItemExceptions, en el que se produce un error si la versión mínima admitida no es SYNC_SERIALIZATION_VERSION_V1. Asimismo, algunos métodos cambiarán la versión mínima admitida, como el método IKnowledgeWithMarkers::AddAllChangeUnitsRequiredMarker, que establecerá la versión mínima admitida en SYNC_SERIALIZATION_VERSION_V3. Para obtener detalles sobre la versión mínima admitida que se requiere o se establece, vea la documentación de referencia de cada método.
Interfaz | Identificador de interfaz |
---|---|
IID_ISyncKnowledge |
|
IID_ISyncKnowledge2 |
|
IID_IKnowledgeWithMarkers |
|
IID_IForgottenKnowledge |
Las interfaces siguientes representan los componentes de un objeto de conocimiento con la versión mínima admitida SYNC_SERIALIZATION_VERSION_V1. La versión mínima admitida de un objeto de conocimiento se puede obtener mediante una llamada a ISyncKnowledge2::GetMinimumSupportedVersion. Cada interfaz se puede obtener llamando al método especificado.
Interfaz | Se obtiene al llamar a |
---|---|
Las interfaces siguientes representan los componentes de todas las versiones de un objeto de conocimiento. Cada interfaz se puede obtener llamando al método especificado.
Interfaz | Se obtiene al llamar a |
---|---|
ISyncKnowledge::FindClockVectorForItem o bien ISyncKnowledge::FindClockVectorForChangeUnit |
|
IProviderSyncServices::CreateReplicaKeyMap o bien ISyncKnowledge::GetReplicaKeyMap. |
Las interfaces siguientes se utilizan para inspeccionar o generar un objeto de conocimiento. Cada interfaz se puede obtener mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Al pasar IID_IConstructReplicaKeyMap al método QueryInterface de un objeto de IReplicaKeyMap. |
|
Al pasar IID_ICoreFragmentInspector a ISyncKnowledge2::GetInspector. |
|
Al llamar a IClockVectorServices::CreateKnowledgeBuilder. |
|
Al pasar IID_IKnowledgeBuilder2 al método QueryInterface de un objeto de IKnowledgeBuilder. |
Interfaces de sesión
Las aplicaciones de sincronización utilizan las interfaces siguientes para iniciar una sesión de sincronización y recuperar información acerca de la sesión. Cada interfaz se puede obtener mediante el mecanismo especificado.
Interfaz | Se obtiene |
---|---|
Al llamar a IApplicationSyncServices::CreateSyncSession. |
|
Al pasar IID_ISyncSessionExtendedErrorInfo al método QueryInterface de un objeto de ISyncSession. |
|
Al llamar a IProviderSyncServices2::CreateSyncSessionState. Sync Framework también la pasa a IKnowledgeSyncProvider::BeginSession e IKnowledgeSyncProvider::EndSession. |
|
Al pasar IID_ISyncSessionState2 al método QueryInterface de un objeto de ISyncSessionState. |
|
Al pasar IID_ISyncDataConversionControl al método QueryInterface de un objeto de ISyncSessionState. |
Interfaces de datos de devolución de llamada de la aplicación
Sync Framework pasa las interfaces siguientes a una aplicación de sincronización utilizando el método de devolución de llamada especificado.
Interfaz | Método de devolución de llamada |
---|---|
Otras interfaces
La interfaz siguiente se utiliza para registrar un convertidor de proveedor. Se puede obtener llamando al método especificado.
Interfaz | Se obtiene al llamar a |
---|---|
Implementación por proveedores de sincronización
Los proveedores de sincronización implementan las interfaces siguientes.
Interfaces de proveedor
El método QueryInterface del objeto de ISyncProvider debe devolver cada una de las interfaces siguientes al recibir el identificador de interfaz especificado. La aplicación de sincronización pasa estas interfaces al objeto de sesión de sincronización mediante IApplicationSyncServices::CreateSyncSession.
Interfaz | Identificador de interfaz |
---|---|
IID_IKnowledgeSyncProvider |
|
IID_ISyncProvider |
|
IID_IFilterTrackingProvider |
|
IID_IRequestFilteredSync |
|
IID_ISupportFilteredSync |
Interfaces de destino del aplicador de cambios
Un proveedor de destino que utiliza un aplicador de cambios sincrónico implementa las interfaces siguientes. El método QueryInterface del objeto de ISynchronousNotifyingChangeApplierTarget debe devolver cada interfaz implementada al recibir el identificador de interfaz especificado. Estas interfaces se pasan al componente de aplicador de cambios con un método como ISynchronousNotifyingChangeApplier::ApplyChanges.
Interfaz | Identificador de interfaz |
---|---|
IID_ISynchronousNotifyingChangeApplierTarget |
|
IID_ISynchronousNotifyingChangeApplierTarget2 |
|
IID_IFilteredReplicaNotifyingChangeApplierTarget |
|
IID_IFilterTrackingNotifyingChangeApplierTarget |
Un proveedor de destino que utiliza un aplicador de cambios asincrónico implementa la interfaz siguiente. Esta interfaz se pasa al componente de aplicador de cambios con un método como IAsynchronousNotifyingChangeApplier::ApplyChanges.
Interfaz | Identificador de interfaz |
---|---|
IID_IAsynchronousNotifyingChangeApplierTarget |
Interfaces de recuperador de datos
Un proveedor de destino que utiliza un aplicador de cambios implementa las interfaces siguientes. Estas interfaces se pasan al componente de aplicador de cambios con un método como el especificado.
Interfaz | Método |
---|---|
Otras interfaces de proveedor
Un proveedor implementa las interfaces siguientes para aprovechar diferentes características, como el filtro o la conversión de datos. La interfaz se pasa a Sync Framework con el mecanismo especificado.
Interfaz | Mecanismo |
---|---|
La devuelve un método como IFilteredReplicaNotifyingChangeApplierTarget::GetNewMoveins. |
|
Se pasa a IProviderConverterRegistration::RegisterProviderConverter. |
|
Se devuelve cuando se pasa IID_ISupportLastWriteTime al método QueryInterface del objeto de recuperador de datos. Normalmente, es un objeto de ISynchronousDataRetriever. |
|
Se pasa a ISyncDataConversionControl::SetSourceDataConverter o a ISyncDataConversionControl::SetDestinationDataConverter. |
|
Se pasa a métodos como IProviderCustomFilteredSyncServices::CreateCustomFilterInfo o IFilterKeyMap::AddFilter. |
|
Se pasa a IProviderCustomFilteredSyncServices::DeserializeFilterKeyMap o IProviderCustomFilteredSyncServices::DeserializeChangeBatchWithFilterKeyMap. |
Implementación mediante aplicaciones de sincronización
Una aplicación de sincronización implementa las interfaces siguientes para recibir la notificación de los eventos que se producen durante la sincronización. Sync Framework obtiene estas interfaces al pasar el identificador de interfaz especificado al método QueryInterface de la interfaz ISyncCallback que se pasa a ISyncSession::RegisterCallback.
Interfaz | Identificador de interfaz |
---|---|
IID_ISyncCallback |
|
IID_ISyncCallback2 |
|
IID_ISyncConstraintCallback |
Códigos de error
Sync Framework usa un conjunto de errores personalizados para notificar los problemas. Para obtener más información, vea Códigos de error de Sync Framework.
Vea también
Conceptos
API no administrada de Sync Framework
Microsoft Sync Framework
Aspectos básicos de los proveedores personalizados
Administrar metadatos para proveedores estándar
Implementar un proveedor estándar personalizado
Implementar una aplicación de sincronización