Compartir a través de


Negociar un filtro

En este tema se describe la forma de utilizar un lenguaje administrado para negociar el filtro que se utiliza para la sincronización. Sync Framework se utiliza para mediar en la negociación entre los dos proveedores.

En este tema se presupone que se dispone de un conocimiento básico de C# y conceptos de Microsoft .NET Framework.

Los ejemplos de este tema se centran en los miembros e interfaces de Sync Framework siguientes:

Descripción de la negociación de filtros

El proveedor de destino puede especificar el filtro que el proveedor de origen utiliza durante la enumeración de cambios. El proveedor de origen puede aceptar o rechazar el filtro que el proveedor de destino solicita. El proveedor de destino puede continuar solicitando filtros hasta que encuentre alguno que el proveedor de origen acepte. Sync Framework actúa como plataforma de mediación en esta negociación. El filtro puede ser de cualquier tipo que sea apropiado para los proveedores.

Sync Framework inicia la negociación de filtros después de llamar a BeginSession. Cuando el proveedor de destino implementa IRequestFilteredSync, Sync Framework llama a su método SpecifyFilter. En este método, el proveedor de destino pasa los filtros al delegado FilterRequestCallback hasta que se acepta uno. Este delegado pasa el filtro especificado al proveedor de origen llamando a su método TryAddFilter. En este método, el proveedor de origen acepta o deniega el filtro solicitado. Si acepta un filtro, el proveedor de origen debe utilizarlo para crear lotes de cambios filtrados que incluyan únicamente los elementos o unidades de cambio que pasan el filtro.

Requisitos de la compilación

Ejemplo

En el código de ejemplo de este tema se muestra la forma de negociar un filtro personalizado entre dos proveedores que realizan el seguimiento de los filtros.

Solicitar el filtro

El proveedor de destino implementa IRequestFilteredSync, para que Sync Framework llame a su método SpecifyFilter. En este método, el proveedor de destino utiliza el delegado FilterRequestCallback para solicitar que el proveedor de origen utilice el primer filtro de la lista de filtros objeto de seguimiento para crear un lote de cambios filtrado. Dado que el proveedor de destino realiza el seguimiento del filtro, especifica un tipo de filtrado de CurrentItemsAndVersionsForMovedOutItems. Si el proveedor de origen deniega el filtro, el proveedor de destino produce una excepción SyncInvalidOperationException para indicar que no se aceptó ningún filtro y que no se puede sincronizar con el proveedor de origen.

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

Aceptar el filtro

El proveedor de origen implementa ISupportFilteredSync para que Sync Framework llame a su método TryAddFilter una vez por cada llamada realizada por el proveedor de destino al delegado FilterRequestCallback. En este método, el proveedor de origen enumera su lista de filtros objeto de seguimiento y, si uno coincide con el filtro solicitado, acepta el 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);
}

Pasos siguientes

A continuación, puede obtener más información acerca de cómo se utilizan los distintos filtros disponibles en Sync Framework, como filtros de elementos, filtros de unidades de cambio y filtros personalizados. Para obtener más información sobre el proceso de filtrado, vea Filtrar los datos de sincronización.

Vea también

Conceptos

Programar tareas comunes de un proveedor personalizado estándar
Filtrar los datos de sincronización