gpt4 book ai didi

c# - 使用 WCF 和同步框架通过 HTTP 同步 SQL Server 2008 数据库

转载 作者:IT王子 更新时间:2023-10-29 04:27:28 25 4
gpt4 key购买 nike

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

最佳答案

我执行了以下操作以将 WCF 与 SQL Server 2008 一起使用来使 Sync Framework 工作

  • 在 SQL Server 2008 中启用更改跟踪
  • 为参与同步的表启用更改跟踪
  • 添加了一个名为 anchor 的元数据表
  • 添加了一个表来跟踪名为“guid”的客户端 ID
  • 使用 MSF 的 codeplex 项目站点提供的 SqlExpressClientSyncProvider 作为客户端同步提供程序
  • 使用 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);
    }
  • 添加 anchor 命令

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

    [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 实例,并使用用于访问 WCF 服务的代理类实例设置了 RemoteProvider。 LocalProvider 设置为 SqlExpressClientSyncProvider 的实例
  • 将表和同步组添加到 SyncAgent 配置
  • SyncAgent.Synchronize()

关于c# - 使用 WCF 和同步框架通过 HTTP 同步 SQL Server 2008 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com