2009-11-01 5 views

Antwort

28

Ich habe die folgende Sync Framework arbeitet mit WCF mit SQL Server 2008

  • Aktiviert Änderungsverfolgung in SQL Server erhalten 2008
  • Aktiviert Änderung für Tabellen-Tracking in der Sync
  • Added eine Metadaten-Teilnahme Tabelle mit dem Namen Anker
  • Eine Tabelle zum Verfolgen von Client-IDs mit dem Namen "guid" hinzugefügt
  • Verwendet SqlExpressClientSyncProvider von MSF Codeplex-Projekt-Website als Client Sync Prov ider
  • Gebrauchte SqlSyncAdapterBuilder zu bauen Adapter für Tabellen in der Sync teilnehmenden

    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); 
    } 
    
  • Added Anker Befehle

    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; 
    
  • einen WCF-Dienst implementiert eine Instanz von DbServerSyncProvider Funktion als Server-Sync-Provider. Sie müssen Sync-Adapter generieren und den Anker-Befehl wie im vorherigen Schritt gezeigt auch für den Server-Provider setzen.

    [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); 
    } 
    
  • eine Proxy-Klasse Erstellt ServerSyncProvider Implementierung WCF-Dienst

    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); 
        } 
    } 
    
  • eine Instanz von SyncAgent Erstellt zugreifen und setzte RemoteProvider mit einer Instanz von Proxy-Klasse, die verwendet wird WCF-Dienst zuzugreifen. LocalProvider mit Instanz SqlExpressClientSyncProvider gesetzt
  • hinzugefügt Tabellen und Sync-Gruppen zu SyncAgent Konfiguration
  • SyncAgent.Synchronize()
+0

Sie sir danken, dass wir ziemlich hilfreich. Erstaunlich, wie einfach es ist, mit Sync Framework + WCF remote zu synchronisieren. Gutes Zeug! –

+0

Gibt es eine Möglichkeit, ein vollständiges Codebeispiel davon zu erhalten? – MetalLemon

+4

Ja, ein Beispielprojekt für Sync Framework 2.1 wäre großartig! – Manni

Verwandte Themen