Ich habe Folgendes getan, um Sync Framework mithilfe von WCF mit SQL Server 2008 zum Laufen zu bringen
- Aktivierte Änderungsverfolgung in SQL Server 2008
- Aktivierte Änderungsverfolgung für Tabellen, die an der Synchronisierung teilnehmen
- Hinzugefügt eine Metadatentabelle namens Anker
- Hinzugefügt wurde eine Tabelle namens "guid" zum Verfolgen von Client-IDs
- Verwendeter SqlExpressClientSyncProvider, der auf der Codeplex-Projektseite von MSF als Client-Synchronisierungsanbieter verfügbar ist
-
Verwendung von SqlSyncAdapterBuilder zum Erstellen von Adaptern für Tabellen, die an der Synchronisierung teilnehmen
foreach (var item in anchorTables) { // Use adapter builder to generate T-SQL for querying change tracking data and CRUD SqlSyncAdapterBuilder builder = new SqlSyncAdapterBuilder(); builder.Connection = new SqlConnection(this.connectionStringFactory.ConnectionString); builder.ChangeTrackingType = ChangeTrackingType.SqlServerChangeTracking; builder.SyncDirection = SyncDirection.Bidirectional; builder.TableName = item.TableName; // Get sync adapters from builder SyncAdapter clientAdapter = builder.ToSyncAdapter(); clientAdapter.TableName = item.TableName; this.clientSyncProvider.SyncAdapters.Add(clientAdapter); }
-
Ankerbefehle hinzugefügt
SqlCommand anchroCommand = new SqlCommand { CommandText = "SELECT @" + SyncSession.SyncNewReceivedAnchor + " = change_tracking_current_version()" }; anchroCommand.Parameters.Add("@" + SyncSession.SyncNewReceivedAnchor, SqlDbType.BigInt) .Direction = ParameterDirection.Output; this.clientSyncProvider.SelectNewAnchorCommand = anchroCommand;
-
Implementiert einen WCF-Dienst mit einer Instanz von DbServerSyncProvider, die als Serversynchronisierungsanbieter fungiert. Sie müssen auch für den Serveranbieter Synchronisierungsadapter generieren und den Ankerbefehl festlegen, wie im vorherigen Schritt gezeigt.
[ServiceContract] public interface ISyncService { [OperationContract] SyncContext ApplyChanges(SyncGroupMetadata groupMetadata, DataSet dataSet, SyncSession syncSession); [OperationContract] SyncContext GetChanges(SyncGroupMetadata groupMetadata, SyncSession syncSession); [OperationContract] SyncSchema GetSchema(Collection<string> tableNames, SyncSession syncSession); [OperationContract] SyncServerInfo GetServerInfo(SyncSession syncSession); }
-
Erstellt eine Proxy-Klasse, die ServerSyncProvider implementiert, um auf den WCF-Dienst zuzugreifen
public class DbServerSyncProviderProxy : ServerSyncProvider { SyncServiceProxy.SyncServiceClient serviceProxy = new SyncServiceProxy.SyncServiceClient(); public override SyncContext ApplyChanges(SyncGroupMetadata groupMetadata, DataSet dataSet, SyncSession syncSession) { return serviceProxy.ApplyChanges(groupMetadata, dataSet, syncSession); } }
- Eine Instanz von SyncAgent erstellt und RemoteProvider mit einer Instanz der Proxy-Klasse festgelegt, die für den Zugriff auf den WCF-Dienst verwendet wird. LocalProvider wird mit der Instanz von SqlExpressClientSyncProvider festgelegt
- Tabellen und Synchronisierungsgruppen zur SyncAgent-Konfiguration hinzugefügt
- SyncAgent.Synchronize()