Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Synchronizowanie baz danych SQL Server 2008 przez HTTP przy użyciu WCF i Sync Framework

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podczas gdy pętla w SQL Server 2008 iteruje przez zakres dat, a następnie INSERT

  2. Scal dwie partycje w jedną w programie SQL Server (T-SQL)

  3. Kiedy sortowanie programu SQL Server jest przewijane?

  4. Jak zainstalować tylko składnik SQL Server Management Studio 2008

  5. Jak zaokrąglać (GÓRA/DÓŁ) w SQL Server – 5 przydatnych wskazówek