这里有人使用过 Sync Framework 并通过 WCF 端点进行同步吗?请分享代码示例或示例项目。我专门寻找离线场景,其中客户端上线只是为了从服务器获取更新。
我执行了以下操作以使同步框架使用 WCF 与 SQL Server 2008 一起工作
- 在 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);
}
-
添加了锚点命令
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 服务
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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)