Zrobiłem następujące, aby Sync Framework działał przy użyciu WCF z SQL Server 2008
- Włączone śledzenie zmian w SQL Server 2008
- Włączone śledzenie zmian dla tabel uczestniczących w synchronizacji
- Dodano tabelę metadanych o nazwie kotwica
- Dodano tabelę do śledzenia identyfikatorów klientów o nazwie „guid”
- Używany SqlExpressClientSyncProvider dostępny w witrynie projektu Codeplex MSF jako dostawca synchronizacji klienta
-
Używał SqlSyncAdapterBuilder do budowania adapterów dla tabel uczestniczących w synchronizacji
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); }
-
Dodano polecenia kotwicy
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;
-
Zaimplementowano usługę WCF przy użyciu wystąpienia DbServerSyncProvider działającego jako dostawca synchronizacji serwera. Będziesz musiał wygenerować adaptery synchronizacji i ustawić polecenie kotwicy, jak pokazano w poprzednim kroku dla dostawcy serwera.
[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); }
-
Utworzono klasę proxy implementującą ServerSyncProvider w celu uzyskania dostępu do usługi WCF
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); } }
- Utworzono wystąpienie SyncAgent i ustawię RemoteProvider z wystąpieniem klasy proxy, która jest używana do uzyskiwania dostępu do usługi WCF. LocalProvider jest ustawiony z instancją SqlExpressClientSyncProvider
- Dodano tabele i grupy synchronizacji do konfiguracji SyncAgent
- SyncAgent.Synchronize()