sql >> Databáze >  >> RDS >> Sqlserver

Synchronizace databází SQL Server 2008 přes HTTP pomocí WCF &Sync Framework

Udělal jsem následující, aby Sync Framework fungoval pomocí WCF s SQL Server 2008

  • Povoleno sledování změn v SQL Server 2008
  • Povoleno sledování změn pro tabulky účastnící se synchronizace
  • Přidána tabulka metadat s názvem anchor
  • Přidána tabulka pro sledování ID klientů s názvem "guid"
  • Použil SqlExpressClientSyncProvider dostupný z webu codeplex projektu MSF jako poskytovatel synchronizace klienta
  • Použil SqlSyncAdapterBuilder k vytvoření adaptérů pro tabulky účastnící se synchronizace

    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);
    }
    
  • Přidány příkazy kotvy

    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;
    
  • Implementována služba WCF pomocí instance DbServerSyncProvider fungující jako poskytovatel synchronizace serveru. Budete muset vygenerovat synchronizační adaptéry a nastavit příkaz kotvy, jak je znázorněno v předchozím kroku, i pro poskytovatele serveru.

    [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);
    }
    
  • Vytvořila proxy třídu implementující ServerSyncProvider pro přístup ke službě 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);
        }
    }
    
  • Vytvořili instanci SyncAgent a nastavili RemoteProvider s instancí třídy proxy, která se používá pro přístup ke službě WCF. LocalProvider je nastaven s instancí SqlExpressClientSyncProvider
  • Do konfigurace SyncAgent byly přidány tabulky a synchronizační skupiny
  • SyncAgent.Synchronize()



  1. Fabric a Sudo jako další uživatel

  2. Sekvence v rámci SQL Select

  3. MySQL, kopírování souborů tabulek vede k ERROR 1017 (HY000):Nelze najít soubor:i když tam je

  4. Salesforce SOQL od Crystal Reports