Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menyinkronkan Database SQL Server 2008 melalui HTTP menggunakan WCF &Sync Framework

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()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan Nomor Minggu ISO dari Tanggal di SQL Server (T-SQL)

  2. Mungkinkah untuk mengatur skema default dari string koneksi?

  3. Apakah praktik buruk NOLOCK (Petunjuk Sql Server)?

  4. pyodbc.connect() berfungsi, tetapi tidak sqlalchemy.create_engine().connect()

  5. Lihat apa yang dilakukan sp_execute