Recupero di una replica non aggiornata
Prima dell'applicazione delle modifiche in Microsoft Sync Framework, viene confrontata la conoscenza dimenticata della replica di origine con la conoscenza corrente della replica di destinazione. Se la conoscenza della destinazione non contiene la conoscenza dimenticata, Sync Framework identifica la replica di destinazione come non aggiornata e avvia una sincronizzazione del recupero.
Per eseguire una sincronizzazione del recupero, Sync Framework effettua i passaggi seguenti:
Se l'applicazione è stata registrata per la ricezione di notifiche, Sync Framework notifica l'applicazione della necessità di una sincronizzazione del recupero. L'applicazione può scegliere di enumerare completamente tutti gli elementi nella replica di origine per eseguire una sincronizzazione parziale oppure di annullare la sincronizzazione. Per impostazione predefinita, viene eseguita l'enumerazione completa.
Quando l'applicazione specifica un'enumerazione completa, Sync Framework ignora il batch di modifiche corrente, enumera completamente tutti gli elementi nella replica di origine, quindi li applica alla replica di destinazione.
Quando l'applicazione specifica una sincronizzazione parziale, Sync Framework continua a enumerare le modifiche dell'origine applicandole alla replica di destinazione come in una sincronizzazione tipica. L'unica eccezione consiste nel fatto che le modifiche apportate alla conoscenza acquisita vengono applicate come singole eccezioni dell'elemento.
Informazioni sulla sincronizzazione del recupero
In una community di sincronizzazione di Sync Framework ogni replica contiene metadati sugli elementi nella replica. I metadati tengono traccia delle informazioni su creazione, modifica ed eliminazione degli elementi archiviati nella replica. Per evitare problemi di spazio di archiviazione insufficiente, è necessario eseguire periodicamente la pulizia dei metadati per gli elementi eliminati. Dopo avere rimosso i metadati per un elemento eliminato, la replica non può più eseguire l'enumerazione dell'eliminazione e inviare quest'ultima come modifica durante la sincronizzazione. Tutte le eliminazioni vengono propagate correttamente e non si verifica alcun problema, purché vengano sincronizzate da tutte le repliche della community di sincronizzazione prima della pulizia dei metadati.
Una replica non è più aggiornata se i relativi dati vengono sincronizzati solo dopo la pulizia dei metadati da parte di un'altra replica. In questo caso, la replica che ha eseguito la pulizia non può più enumerare le modifiche di cui è stata eseguita la pulizia, di conseguenza non può più inviarle alla replica non aggiornata. Per risolvere questa situazione, quando viene effettuato un tentativo di sincronizzazione tra una replica di origine che ha eseguito la pulizia dei metadati e una replica di destinazione non aggiornata, Sync Framework richiede il ripristino della replica di destinazione tramite sincronizzazione del recupero. È necessario eseguire la sincronizzazione del recupero per evitare che la replica non aggiornata reintroduca un elemento eliminato dalla community di sincronizzazione.
Sync Framework utilizza la conoscenza dimenticata della replica di origine per rilevare quando la replica di destinazione non è aggiornata. Quando durante una replica vengono rimossi i metadati per un elemento eliminato, la versione dell'eliminazione viene registrata nella conoscenza dimenticata della replica. La conoscenza dimenticata può essere utilizzata per identificare gli elementi inclusi nella conoscenza della replica che sono stati eliminati e di cui sono stati rimossi i metadati. Tenere presente che la conoscenza dimenticata è una stima per eccesso degli elementi di cui sono stati rimossi i metadati. Di conseguenza, la conoscenza dimenticata potrebbe anche contenere elementi che presentano ancora voci attive nei metadati.
Risposta alla notifica di una sincronizzazione del recupero
Un'applicazione può effettuare la registrazione per la ricezione di notifiche della necessità di eseguire una sincronizzazione del recupero. Questa notifica offre all'applicazione l'opportunità di avviare un'enumerazione completa, continuare con la sessione corrente oppure arrestare la sessione. Per impostazione predefinita, se l'applicazione non ha effettuato la registrazione per la ricezione di notifiche, Sync Framework avvia un'enumerazione completa.
Risposta alla notifica di una sincronizzazione del recupero tramite codice gestito
Per ricevere la notifica della necessità di eseguire una sincronizzazione del recupero, l'applicazione implementa un gestore eventi e lo registra per la ricezione dell'evento FullEnumerationNeeded. Quando viene generato questo evento, il gestore risponde impostando la proprietà Action dell'oggetto FullEnumerationNeededEventArgs su una delle azioni seguenti:
Con Full, in Sync Framework il batch di modifiche corrente viene ignorato e viene avviata un'enumerazione completa mediante la chiamata ai metodi riportati di seguito..
Il metodo GetFullEnumerationChangeBatch viene chiamato per enumerare tutte le modifiche dell'elemento rispetto alla replica di origine.
Il metodo ProcessFullEnumerationChangeBatch viene chiamato per applicare le modifiche alla replica di destinazione.
In seguito a Partial, Sync Framework applica il batch di modifiche corrente e continua con la sessione come in una sincronizzazione tipica. L'unica eccezione è data dal fatto che tutte le modifiche alla conoscenza acquisita vengono applicate come singole eccezioni dell'elemento.
In seguito a Abort, Sync Framework arresta la sessione corrente.
Risposta alla notifica di una sincronizzazione del recupero tramite codice non gestito
Per ricevere la notifica della necessità di eseguire una sincronizzazione del recupero, l'applicazione implementa l'interfaccia ISyncCallback e la registra tramite ISyncSession::RegisterCallback. Prima dell'avvio di una sincronizzazione del recupero, in Sync Framework viene chiamato ISyncCallback::OnFullEnumerationNeeded. Questo metodo restituisce una delle azioni seguenti:
Con SFEA_FULL_ENUMERATION, in Sync Framework il batch di modifiche corrente viene ignorato e viene avviata un'enumerazione completa mediante la chiamata ai metodi riportati di seguito.:
Il metodo IKnowledgeSyncProvider::GetFullEnumerationChangeBatch viene chiamato per enumerare tutte le modifiche dell'elemento rispetto alla replica di origine.
Il metodo IKnowledgeSyncProvider::ProcessFullEnumerationChangeBatch viene chiamato per applicare le modifiche alla replica di destinazione.
In seguito a SFEA_PARTIAL_SYNC, Sync Framework applica il batch di modifiche corrente e continua con la sessione come in una sincronizzazione tipica. L'unica eccezione è data dal fatto che tutte le modifiche alla conoscenza acquisita vengono applicate come singole eccezioni dell'elemento.
In seguito a SFEA_ABORT, Sync Framework arresta la sessione corrente.
Enumerazione completata di tutte le modifiche nella replica di origine
Durante un'enumerazione completa, Sync Framework richiede al provider di origine di enumerare tutte le modifiche; Sync Framework quindi effettua il confronto di tali modifiche tra il provider di origine e gli elementi nella replica di destinazione. Si presuppone che qualsiasi elemento nella replica di destinazione a cui non corrisponde una modifica rispetto al provider di origine sia stato eliminato dalla replica di origine e verrà eliminato dalla replica di destinazione. Per questo motivo, assicurarsi che il provider di origine enumeri correttamente tutti gli elementi nella replica di origine, altrimenti gli elementi verranno erroneamente eliminati dalla replica di destinazione.
Enumerazione completa delle modifiche tramite codice gestito
Per enumerare completamente le modifiche rispetto al provider di origine, in Sync Framework viene chiamato GetFullEnumerationChangeBatch anziché GetChangeBatch. Quando viene chiamato questo metodo, il provider di origine restituisce un oggetto FullEnumerationChangeBatch. Per creare questo batch di modifiche, effettuare i passaggi seguenti:
Aprire un gruppo ordinato utilizzando BeginOrderedGroup. L'ID elemento utilizzato per iniziare il gruppo deve essere il primo ID enumerato e deve essere inferiore o uguale al limite inferiore dell'enumerazione specificato in GetFullEnumerationChangeBatch.
Se lo si desidera, aggiungere al batch modifiche (ordinate per ID elemento) con ID elemento inferiori al limite inferiore dell'enumerazione e che non sono contenute nella conoscenza di destinazione.
Aggiungere modifiche al batch, ordinate per ID elemento, con ID maggiori o uguali al limite inferiore dell'enumerazione.
Chiudere il gruppo ordinato utilizzando EndOrderedGroup. Specificare il limite superiore dell'enumerazione come ID dell'ultima modifica aggiunta al gruppo. Quando si giunge all'ultimo batch, specificare il limite superiore dell'enumerazione come Infinity.
In corrispondenza dell'ultimo batch, chiamare SetLastBatch;, altrimenti in Sync Framework verrà nuovamente chiamato GetFullEnumerationChangeBatch.
Enumerazione completa delle modifiche tramite codice non gestito
Per enumerare completamente le modifiche rispetto al provider di origine, in Sync Framework viene chiamato IKnowledgeSyncProvider::GetFullEnumerationChangeBatch anziché IKnowledgeSyncProvider::GetChangeBatch. Quando viene chiamato questo metodo, il provider di origine restituisce un oggetto ISyncFullEnumerationChangeBatch. Per creare questo batch di modifiche, effettuare i passaggi seguenti:
Creare l'oggetto batch di modifiche tramite IProviderSyncServices::CreateFullEnumerationChangeBatch.
Aprire un gruppo ordinato utilizzando ISyncChangeBatchBase::BeginOrderedGroup. L'ID elemento utilizzato per iniziare il gruppo deve essere il primo ID enumerato e deve essere inferiore o uguale al limite inferiore dell'enumerazione specificato in GetFullEnumerationChangeBatch.
Se lo si desidera, aggiungere modifiche al batch, ordinate per ID elemento, con ID inferiori al limite inferiore dell'enumerazione e che non sono contenute nella conoscenza della destinazione.
Aggiungere modifiche al batch, ordinate per ID elemento, con ID maggiori o uguali al limite inferiore dell'enumerazione.
Chiudere il gruppo ordinato utilizzando ISyncChangeBatchBase::EndOrderedGroup. Specificare il limite superiore dell'enumerazione come ID dell'ultima modifica aggiunta al gruppo. Quando si giunge all'ultimo batch, specificare il limite superiore dell'enumerazione come NULL
e chiamare ISyncChangeBatchBase::SetLastBatch, altrimenti Sync Framework chiamerà nuovamente GetFullEnumerationChangeBatch.
Elaborazione delle modifiche durante una sincronizzazione del recupero
Per determinare gli elementi da eliminare dalla replica di destinazione, Sync Framework richiede l'enumerazione ordinata per ID elemento, da parte del provider di destinazione, di tutti gli elementi della replica di destinazione con ID compresi tra i limiti inferiore e superiore di ogni batch di modifiche. Gli elementi della replica di destinazione a cui non corrispondono modifiche enumerate rispetto al provider di origine verranno eliminati.
Il provider di destinazione passa l'elenco di elementi di destinazione all'oggetto di applicazione modifiche. Quest'ultimo determina come gestire ogni modifica e chiama il metodo del provider di destinazione appropriato per applicare la modifica alla replica di destinazione.
Elaborazione delle modifiche tramite codice gestito
Per elaborare le modifiche durante una sincronizzazione del recupero, in Sync Framework viene chiamato il metodo ProcessFullEnumerationChangeBatch del provider di destinazione. Questo metodo fornisce un oggetto FullEnumerationChangeBatch contenente le modifiche rispetto al provider di origine.
Se il provider di destinazione utilizza l'oggetto NotifyingChangeApplier fornito da Sync Framework, deve chiamare il metodo ApplyFullEnumerationChanges per applicare le modifiche. Questo metodo richiede un insieme, ordinato per ID elemento, di tutte le modifiche della destinazione con ID elemento tra le proprietà DestinationVersionEnumerationRangeLowerBound e DestinationVersionEnumerationRangeUpperBound del batch di modifiche di origine. Per applicare le modifiche, l'oggetto NotifyingChangeApplier chiama i metodi INotifyingChangeApplierTarget, come avviene durante una sincronizzazione tipica.
Elaborazione delle modifiche tramite codice non gestito
Per elaborare le modifiche durante una sincronizzazione del recupero, in Sync Framework viene chiamato il metodo IKnowledgeSyncProvider::ProcessFullEnumerationChangeBatch del provider di destinazione. Questo metodo fornisce un oggetto ISyncFullEnumerationChangeBatch che contiene le modifiche dal provider di origine.
Se il provider di destinazione utilizza l'oggetto ISynchronousNotifyingChangeApplier fornito da Sync Framework, il provider di destinazione deve chiamare il metodo ISynchronousNotifyingChangeApplier::ApplyFullEnumerationChanges per applicare le modifiche. Questo metodo richiede un insieme, ordinato per ID elemento, di tutte le modifiche della destinazione con ID elemento tra le proprietà ISyncFullEnumerationChangeBatch::GetClosedLowerBoundItemId e ISyncFullEnumerationChangeBatch::GetClosedUpperBoundItemId del batch di modifiche di origine. Per applicare le modifiche, l'oggetto ISynchronousNotifyingChangeApplier chiama i metodi Interfaccia ISynchronousNotifyingChangeApplierTarget come se si trattasse di una tipica sincronizzazione.
Vedere anche
Concetti
Provider di sincronizzazione
Enumerazione delle modifiche
Applicazione delle modifiche