使用 WCF & 通过 HTTP 同步 SQL Server 2008 数据库同步框架 [英] Syncing SQL Server 2008 Databases over HTTP using WCF & Sync Framework
问题描述
这里有没有人使用过 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);
}
}
这篇关于使用 WCF & 通过 HTTP 同步 SQL Server 2008 数据库同步框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!