2009-11-01 10 views

Odpowiedz

28

Zrobiłem następujące dostać Sync Framework działa przy użyciu WCF z SQL Server 2008

  • Włączone śledzenie zmian w SQL Server 2008
  • Włączone zmiana śledzenie tabel uczestniczących w synchronizacji
  • dodał metadanych tabela o nazwie kotwica
  • Dodany stół do śledzenia klienta identyfikatory o nazwie „GUID”
  • Używane SqlExpressClientSyncProvider dostępny od strony projektu CodePlex MSF jako klienta synchronizacji Prov Ider
  • Używane SqlSyncAdapterBuilder budować adaptery do stołów uczestniczących w 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); 
    } 
    
  • Dodane kotwicę poleceń

    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; 
    
  • Wdrożone usługi WCF przy użyciu wystąpienie DbServerSyncProvider funkcjonują jako dostawcy Serwer synchronizacji. Będziesz mieć wygenerowane adaptery synchronizacji i ustawić polecenie zakotwiczenia, 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 wykonawczych ServerSyncProvider dostęp do usług 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 instancję SyncAgent i ustaw RemoteProvider z instancją klasy proxy, który jest używany do dostępu do usług WCF. LocalProvider jest ustawiony z instancji SqlExpressClientSyncProvider
  • Dodano stoły i grupy synchronizacji konfiguracji SyncAgent
  • SyncAgent.Synchronize()
+0

Thank you sir, że my bardzo pomocne. Niesamowite, jak łatwo jest zsynchronizować zdalnie za pomocą Sync Framework + WCF. Dobry towar! –

+0

Czy jest jakiś sposób, aby uzyskać pełną próbkę kodu tego? – MetalLemon

+4

Tak, przykładowy projekt dla Sync Framework 2.1 byłby świetny! – Manni

Powiązane problemy