Tôi đã làm như sau để Sync Framework hoạt động bằng WCF với SQL Server 2008
- Đã bật theo dõi thay đổi trong SQL Server 2008
- Đã bật theo dõi thay đổi cho các bảng tham gia Đồng bộ hóa
- Đã thêm một bảng siêu dữ liệu có tên là anchor
- Đã thêm một bảng để theo dõi các Id khách hàng có tên "hướng dẫn"
- SqlExpressClientSyncProvider đã qua sử dụng có sẵn từ trang web dự án codeplex của MSF với tư cách là Nhà cung cấp đồng bộ hóa ứng dụng khách
-
Đã sử dụng SqlSyncAdapterBuilder để tạo bộ điều hợp cho các bảng tham gia Đồng bộ hóa
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); }
-
Đã thêm lệnh neo
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;
-
Đã triển khai Dịch vụ WCF bằng cách sử dụng phiên bản DbServerSyncProvider hoạt động như nhà cung cấp đồng bộ hóa Máy chủ. Bạn cũng sẽ tạo bộ điều hợp đồng bộ và đặt lệnh neo như được hiển thị trong bước trước cho nhà cung cấp Máy chủ.
[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); }
-
Đã tạo một lớp proxy triển khai ServerSyncProvider để truy cập dịch vụ 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); } }
- Đã tạo một phiên bản của SyncAgent và đặt RemoteProvider bằng một phiên bản của lớp proxy được sử dụng để truy cập dịch vụ WCF. LocalProvider được thiết lập với phiên bản của SqlExpressClientSyncProvider
- Đã thêm bảng và đồng bộ hóa nhóm vào cấu hình SyncAgent
- SyncAgent.Synchronize ()