2009-11-01 14 views
23

का उपयोग कर HTTP पर SQL सर्वर 2008 डेटाबेस को सिंक करना क्या कोई यहां सिंक फ्रेमवर्क के साथ काम करता है और डब्ल्यूसीएफ एंडपॉइंट्स के माध्यम से समन्वयित करता है? कृपया कोड नमूने या नमूना परियोजनाओं को साझा करें। मैं विशेष रूप से ऑफलाइन परिदृश्यों की तलाश में हूं जहां ग्राहक केवल सर्वर से अपडेट लाने के लिए ऑनलाइन आता है।डब्ल्यूसीएफ और सिंक फ्रेमवर्क

उत्तर

28

मैंने किया था सिंक फ्रेमवर्क SQL सर्वर के साथ WCF का उपयोग कर काम कर पाने के लिए निम्न 2008

  • सक्षम एसक्यूएल सर्वर में ट्रैकिंग बदलें 2008
  • सक्षम परिवर्तन में सिंक
  • जोड़ा एक मेटाडाटा भाग लेने वाले टेबल के लिए ट्रैकिंग तालिका नामित लंगर
  • जोड़ा ग्राहक आईडी ट्रैक करने के लिए एक मेज नाम "GUID"
  • ग्राहक सिंक प्रांत के रूप में एमएसएफ के codeplex परियोजना साइट से SqlExpressClientSyncProvider उपलब्ध प्रयुक्त Ider
  • प्रयुक्त SqlSyncAdapterBuilder सिंक में भाग लेने वाले

    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; 
    
  • DbServerSyncProvider सर्वर सिंक प्रदाता के रूप में कार्य करने में एक उदाहरण का उपयोग करते हुए एक WCF सेवा लागू किया। आप सर्वर प्रदाता के लिए पिछले चरण में दिखाए गए अनुसार सिंक एडेप्टर उत्पन्न करेंगे और एंकर कमांड सेट करेंगे।

    [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 सेवा का उपयोग किया जाता है प्रॉक्सी वर्ग का एक उदाहरण के साथ 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 सेट बनाया का उपयोग करने के बनाया गया। LocalProvider
  • जोड़ी टेबल और सिंक समूह SyncAgent विन्यास
  • SyncAgent.Synchronize()
+0

धन्यवाद महोदय, कि हम बहुत उपयोगी करने के लिए SqlExpressClientSyncProvider के कहने के साथ स्थापित किया जाएगा। सिंक फ्रेमवर्क + डब्ल्यूसीएफ का उपयोग करके दूरस्थ रूप से सिंक करना कितना आसान है। अच्छी चीज़! –

+0

क्या इसका पूरा कोड नमूना प्राप्त करने का कोई तरीका है? – MetalLemon

+4

हां, सिंक फ्रेमवर्क 2.1 के लिए नमूना प्रोजेक्ट बहुत अच्छा होगा! – Manni

संबंधित मुद्दे