Condividi tramite


Procedura: negoziare un filtro

In questo argomento viene illustrato come utilizzare un linguaggio gestito per negoziare il filtro utilizzato per la sincronizzazione. Sync Framework viene utilizzato per mediare la negoziazione tra due provider.

Questo argomento presuppone una conoscenza di base dei concetti relativi a C# e Microsoft .NET Framework.

Gli esempi riportati in questo argomento riguardano le interfacce e i membri di Sync Framework seguenti:

Informazioni sulla negoziazione dei filtri

Il provider di destinazione può specificare il filtro utilizzato dal provider di origine durante l'enumerazione delle modifiche. Il provider di origine può accettare o negare il filtro richiesto dal provider di destinazione. Il provider di destinazione può continuare a richiedere filtri finché non ne viene trovato uno accettato dal provider di origine. Questa negoziazione avviene tramite Sync Framework. Il filtro può essere del tipo più appropriato per i provider.

Sync Framework avvia la negoziazione dei filtri dopo aver chiamato BeginSession. Quando il provider di destinazione implementa IRequestFilteredSync, Sync Framework chiama il relativo metodo SpecifyFilter. In questo metodo, il provider di destinazione passa filtri al delegato FilterRequestCallback finché non ne viene accettato uno. Il delegato passa i filtri al provider di origine chiamando il relativo metodo TryAddFilter. In questo metodo, il provider di origine accetta o nega il filtro richiesto. Se accetta un filtro, il provider di origine deve utilizzarlo per produrre batch di modifiche filtrate che includono solo elementi o unità di modifica che passano il filtro.

Requisiti di compilazione

Esempio

Nell'esempio di codice in questo argomento viene illustrato come negoziare un filtro personalizzato tra due provider che rilevano filtri.

Richiesta del filtro

Il provider di destinazione implementa IRequestFilteredSync, pertanto Sync Framework chiama il relativo metodo SpecifyFilter. In questo metodo, il provider di destinazione utilizza il delegato FilterRequestCallback per richiedere che il primo filtro nel proprio elenco dei filtri rilevati venga utilizzato dal provider di origine per produrre un batch di modifiche filtrato. Poiché il provider di destinazione rileva il filtro, specifica un tipo di filtro di CurrentItemsAndVersionsForMovedOutItems. Se il provider di origine nega il filtro, il provider di destinazione genera SyncInvalidOperationException per indicare che non era stato definito alcun filtro e che non è possibile eseguire la sincronizzazione con il provider di origine.

public void SpecifyFilter(FilterRequestCallback filterRequest)
{
    // Use the first tracked filter as the filter for sync.
    if (0 < _ContactStore.TrackedFilters.Count)
    {
        _filterForSync = _ContactStore.TrackedFilters[0];
    }

    // The source provider must agree to send a filtered change batch.
    if (!filterRequest(_filterForSync, FilteringType.CurrentItemsAndVersionsForMovedOutItems))
    {
        throw new SyncInvalidOperationException("Filter specified by SpecifyFilter was rejected.");
    }
}

Accettazione del filtro

Il provider di origine implementa ISupportFilteredSync, pertanto Sync Framework chiama il relativo metodo TryAddFilter una volta per ogni chiamata effettuata dal provider di destinazione al delegato FilterRequestCallback. In questo metodo, il provider di origine enumera il proprio elenco dei filtri rilevati e, se uno corrisponde al filtro richiesto, accetta tale filtro.

public bool TryAddFilter(object filter, FilteringType filteringType)
{
    _filterForSync = null;

    // The filter must be tracked by both replicas.
    for (int filterKey = 0; filterKey < _filterKeyMap.Count; filterKey++)
    {
        if (_filterKeyMap[filterKey].IsIdentical((ISyncFilter)filter))
        {
            _filterForSync = (AddressFilter)_filterKeyMap[filterKey];
            _filteringType = filteringType;
            break;
        }
    }

    return (null != _filterForSync);
}

Passaggi successivi

A questo punto potrebbero essere necessarie informazioni sull'utilizzo dei diversi filtri disponibili in Sync Framework, ad esempio i filtri degli elementi, i filtri delle unità di modifica e quelli personalizzati. Per ulteriori informazioni sull'utilizzo dei filtri, vedere Filtro dei dati di sincronizzazione.

Vedere anche

Concetti

Programmazione di attività comuni del provider standard personalizzato
Filtro dei dati di sincronizzazione