Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Синхронизиране на бази данни на SQL Server 2008 през HTTP с помощта на WCF &Sync Framework

Направих следното, за да накарам Sync Framework да работи с WCF с SQL Server 2008

  • Активирано проследяване на промените в SQL Server 2008
  • Активирано проследяване на промените за таблици, участващи в синхронизирането
  • Добавена е таблица с метаданни, наречена anchor
  • Добавена е таблица за проследяване на идентификатори на клиенти, наречена „guid“
  • Използван е SqlExpressClientSyncProvider, наличен от сайта на MSF codeplex проект като доставчик на синхронизиране на клиенти
  • Използван е SqlSyncAdapterBuilder за изграждане на адаптери за таблици, участващи в 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);
    }
    
  • Добавени команди за закрепване

    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;
    
  • Внедрена WCF услуга, използваща екземпляр на DbServerSyncProvider, функциониращ като доставчик на синхронизиране на сървъра. Ще трябва да генерирате адаптери за синхронизиране и да зададете команда за закрепване, както е показано в предишната стъпка и за доставчик на сървър.

    [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);
    }
    
  • Създаден прокси клас, внедряващ ServerSyncProvider за достъп до 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);
        }
    }
    
  • Създаден екземпляр на SyncAgent и зададен RemoteProvider с екземпляр на прокси клас, който се използва за достъп до услугата WCF. LocalProvider е зададен с екземпляр на SqlExpressClientSyncProvider
  • Добавени са таблици и групи за синхронизиране към конфигурацията на 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. Премахнете числата от string sql сървъра

  2. Какво е SQL Server?

  3. изчислете количеството на запасите при затваряне, цената и стойността по FIFO

  4. Как да инсталирам пълен текст на sql сървър 2008?

  5. SQL избира няколко реда в една колона