Saya melakukan hal berikut agar Sync Framework bekerja menggunakan WCF dengan SQL Server 2008
- Mengaktifkan Pelacakan Perubahan di SQL Server 2008
- Mengaktifkan pelacakan perubahan untuk tabel yang berpartisipasi dalam Sinkronisasi
- Menambahkan tabel metadata bernama jangkar
- Menambahkan tabel untuk melacak ID klien bernama "guid"
- SqlExpressClientSyncProvider yang digunakan tersedia dari situs proyek codeplex MSF sebagai Penyedia Sinkronisasi Klien
-
Menggunakan SqlSyncAdapterBuilder untuk membuat adaptor untuk tabel yang berpartisipasi dalam Sync
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); }
-
Menambahkan perintah jangkar
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;
-
Menerapkan Layanan WCF menggunakan instance DbServerSyncProvider yang berfungsi sebagai penyedia sinkronisasi Server. Anda akan menghasilkan adaptor sinkronisasi dan mengatur perintah jangkar seperti yang ditunjukkan pada langkah sebelumnya untuk penyedia Server juga.
[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); }
-
Membuat kelas proxy yang mengimplementasikan ServerSyncProvider untuk mengakses layanan 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); } }
- Membuat instance SyncAgent dan menyetel RemoteProvider dengan instance kelas proxy yang digunakan untuk mengakses layanan WCF. LocalProvider disetel dengan instance SqlExpressClientSyncProvider
- Menambahkan tabel dan grup sinkronisasi ke konfigurasi SyncAgent
- SyncAgent.Synchronize()