Vorgehensweise: Aushandeln eines Filters
In diesem Thema wird beschrieben, wie mithilfe einer verwalteten Sprache der Filter ausgehandelt werden kann, der für die Synchronisierung verwendet wird. Sync Framework wird für die Vermittlung der Aushandlung zwischen den beiden Anbietern verwendet.
Dieses Thema setzt grundlegende Kenntnisse über C#- und Microsoft .NET Framework-Konzepte voraus.
In den Beispielen dieses Themas liegt der Schwerpunkt auf den folgenden Sync Framework-Schnittstellen und -Klassen:
Grundlegendes zur Filteraushandlung
Der Zielanbieter kann den Filter angeben, der während der Änderungsenumeration vom Quellenanbieter verwendet wird. Der Quellenanbieter kann den vom Zielanbieter angeforderten Filter akzeptieren oder verweigern. Der Zielanbieter kann weiterhin Filter anfordern, bis einer gefunden wird, den der Quellenanbieter akzeptiert. Diese Aushandlung wird von Sync Framework vermittelt. Der Filter kann einen beliebigen Typ aufweisen, der für die Anbieter am besten geeignet ist.
Sync Framework startet die Filteraushandlung nach dem Aufrufen von BeginSession. Wenn der Zielanbieter IRequestFilteredSync implementiert, ruft Sync Framework die zugehörige SpecifyFilter-Methode auf. In dieser Methode übergibt der Zielanbieter so lange Filter an den FilterRequestCallback-Delegat, bis einer akzeptiert wird. Dieser Delegat übergibt den Filter durch Aufrufen der zugehörigen TryAddFilter-Methode an den Quellenanbieter. In dieser Methode akzeptiert der Quellenanbieter den angeforderten Filter oder lehnt ihn ab. Wenn der Quellenanbieter einen Filter akzeptiert, muss er ihn für die Erstellung gefilterter Änderungsbatches verwenden, die nur Elemente oder Änderungseinheiten enthalten, die den Filter passieren.
Erstellungsanforderungen
.NET Framework 2.0 oder höher.
Verweis auf Microsoft.Synchronization.
Verweis auf Microsoft.Synchronization.MetadataStorage.
Beispiel
Der Beispielcode in diesem Thema zeigt die Aushandlung eines benutzerdefinierten Filters zwischen zwei Anbietern, die Filter nachverfolgen.
Anfordern des Filters
Der Zielanbieter implementiert IRequestFilteredSync, sodass Sync Framework die SpecifyFilter-Methode aufruft. In dieser Methode verwendet der Zielanbieter den FilterRequestCallback-Delegat, um anzufordern, dass der Quellenanbieter den ersten Filter in der Liste nachverfolgter Filter für die Erstellung eines gefilterten Änderungsbatches verwendet. Da der Zielanbieter den Filter nachverfolgt, gibt er als Filtertyp CurrentItemsAndVersionsForMovedOutItems an. Wenn der Quellenanbieter den Filter ablehnt, löst der Zielanbieter SyncInvalidOperationException aus, um anzuzeigen, dass keine Einigung über einen Filter stattgefunden hat und keine Synchronisierung mit dem Quellenanbieter durchgeführt werden kann.
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.");
}
}
Akzeptieren des Filters
Der Quellenanbieter implementiert ISupportFilteredSync, sodass Sync Framework die zugehörige TryAddFilter-Methode für jeden Aufruf, der vom Zielanbieter an den FilterRequestCallback-Delegat erfolgt, einmal aufruft. In dieser Methode zählt der Quellenanbieter seine Liste nachverfolgter Filter auf und akzeptiert einen der Filter, wenn dieser mit dem angeforderten Filter übereinstimmt.
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);
}
Nächste Schritte
Als Nächstes sollten Sie sich mit der Verwendung der verschiedenen in Sync Framework verfügbaren Filter befassen, z. B. Elementfilter, Änderungseinheitsfilter und benutzerdefinierte Filter. Weitere Informationen zum Filtern finden Sie unter Filtern von Synchronisierungsdaten.
Siehe auch
Konzepte
Programmieren allgemeiner benutzerdefinierter Standardanbietertasks
Filtern von Synchronisierungsdaten