使用 WCF & 通过 HTTP 同步 SQL Server 2008 数据库同步框架 [英] Syncing SQL Server 2008 Databases over HTTP using WCF & Sync Framework

查看:32
本文介绍了使用 WCF & 通过 HTTP 同步 SQL Server 2008 数据库同步框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里有没有人使用过 Sync Framework 并通过 WCF 端点进行同步?请分享代码示例或示例项目.我专门寻找客户端上线只是为了从服务器获取更新的离线场景.

Has anyone here worked with Sync Framework and syncing through WCF endpoints? Please share code samples or sample projects. I am specifically looking for offline scenarios where client comes online only to fetch updates from the Server.

推荐答案

我执行了以下操作以使 Sync Framework 使用 WCF 和 SQL Server 2008 工作

I did the following to get Sync Framework working using WCF with SQL Server 2008

  • 在 SQL Server 2008 中启用更改跟踪
  • 为参与同步的表启用更改跟踪
  • 添加了一个名为锚点的元数据表
  • 添加了一个表来跟踪名为guid"的客户端 ID
  • 使用可从 MSF 的 codeplex 项目站点获得的 SqlExpressClientSyncProvider 作为客户端同步提供程序
  • 使用 SqlSyncAdapterBuilder 为参与同步的表构建适配器

  • Enabled Change Tracking in SQL Server 2008
  • Enabled change tracking for tables participating in the Sync
  • Added a metadata table named anchor
  • Added a table to track client Ids named "guid"
  • Used SqlExpressClientSyncProvider available from MSF's codeplex project site as Client Sync Provider
  • Used SqlSyncAdapterBuilder to build adapters for tables participating in the 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);
}

  • 添加锚命令

  • Added anchor commands

    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 服务.您也将为服务器提供程序生成同步适配器并设置锚点命令,如上一步所示.

  • Implemented a WCF Service using a instance of DbServerSyncProvider functioning as Server sync provider. You will have generate sync adapters and set anchor command as shown in previous step for Server provider too.

    [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 服务

  • Created a proxy class implementing ServerSyncProvider to access WCF service

    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()
  • 这篇关于使用 WCF &amp; 通过 HTTP 同步 SQL Server 2008 数据库同步框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆