Partager via


Procédure : négocier un filtre

Cette rubrique décrit comment utiliser un langage managé pour négocier le filtre utilisé pour la synchronisation. Sync Framework est utilisé pour arbitrer la négociation entre les deux fournisseurs.

Cette rubrique suppose une connaissance de base des concepts C# et Microsoft .NET Framework.

Les exemples de cette rubrique reposent sur les interfaces et les membres Sync Framework suivants :

Présentation de la négociation de filtres

Le fournisseur de destination peut spécifier le filtre utilisé par le fournisseur de source pendant l'énumération des modifications. Le fournisseur de source peut accepter ou refuser le filtre que le fournisseur de destination demande. Le fournisseur de destination peut continuer à demander des filtres jusqu'à ce que le fournisseur de source en accepte un. Sync Framework sert de médiateur dans cette négociation. Le filtre peut être de n'importe quel type dès lors qu'il convient aux fournisseurs.

Sync Framework démarre la négociation de filtres après avoir appelé BeginSession. Lorsque le fournisseur de destination implémente IRequestFilteredSync, Sync Framework appelle sa méthode SpecifyFilter. Dans cette méthode, le fournisseur de destination passe des filtres au délégué FilterRequestCallback jusqu'à ce que l'un d'eux soit accepté. Ce délégué passe le filtre au fournisseur de source en appelant sa méthode TryAddFilter. Dans cette méthode, le fournisseur de source accepte ou refuse le filtre demandé. S'il accepte un filtre, le fournisseur de source doit l'utiliser pour produire des lots de modifications filtrés qui incluent uniquement les éléments ou unités de modification qui passent le filtre.

Configuration de build

Exemple

L'exemple de code dans cette rubrique montre comment négocier un filtre personnalisé entre deux fournisseurs qui effectuent le suivi des filtres.

Demande du filtre

Le fournisseur de destination implémentant IRequestFilteredSync, Sync Framework appelle sa méthode SpecifyFilter. Dans cette méthode, le fournisseur de destination utilise le délégué FilterRequestCallback pour demander que le premier filtre dans sa liste de filtres suivis soit utilisé par le fournisseur de source pour produire un lot de modifications filtré. Étant donné que le fournisseur de destination effectue le suivi du filtre, il spécifie un type de filtrage de CurrentItemsAndVersionsForMovedOutItems. Si le fournisseur de source refuse le filtre, le fournisseur de destination lève SyncInvalidOperationException pour indiquer qu'aucun filtre n'a été défini et qu'il ne peut pas synchroniser avec le fournisseur de source.

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.");
    }
}

Acceptation du filtre

Le fournisseur de source implémentant ISupportFilteredSync, Sync Framework appelle sa méthode TryAddFilter une fois pour chaque appel passé par le fournisseur de destination au délégué FilterRequestCallback. Dans cette méthode, le fournisseur de source énumère sa liste de filtres suivis et, si l'un d'eux correspond au filtre demandé, il accepte le filtre.

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);
}

Étapes suivantes

Vous pouvez ensuite vouloir en savoir plus sur l'utilisation des différents filtres disponibles dans Sync Framework, tel que les filtres d'élément, les filtres d'unité de modification et les filtres personnalisés. Pour plus d'informations sur le filtrage, consultez Filtrage des données de synchronisation.

Voir aussi

Autres ressources

Programmation de tâches de fournisseurs personnalisés standard courantes

Filtrage des données de synchronisation