同步框架客户端必须赢得场景

本文关键字:框架 客户端 同步 | 更新日期: 2023-09-27 18:15:44

我在两个SQL Express DB之间进行同步,一个是服务器,一个是客户端。

我有下一个代码使同步:

        /// <summary>
        /// Sync to Providers
        /// </summary>
        /// <param name="localProvider">can be RelationalProvider Proxy !!! (WCF)</param>
        /// <param name="remoteProvider">RelationalProvider Proxy !!! (WCF)</param>
        /// <param name="syncDirectionOrder"></param>
        /// <returns></returns>
        private SyncOperationStatistics SynchronizeProviders(KnowledgeSyncProvider localProvider, KnowledgeSyncProvider remoteProvider, SyncDirectionOrder syncDirectionOrder)
        {
            localProvider.Configuration.CollisionConflictResolutionPolicy = CollisionConflictResolutionPolicy.RenameDestination;
            localProvider.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.SourceWins;
            remoteProvider.Configuration.CollisionConflictResolutionPolicy = CollisionConflictResolutionPolicy.RenameSource;
            remoteProvider.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.DestinationWins;
            SubscribeResultEvent(localProvider);
            SyncOrchestrator orchestrator = new SyncOrchestrator
            {
                LocalProvider = localProvider,
                RemoteProvider = remoteProvider,
                Direction = syncDirectionOrder
            };
             SyncOperationStatistics stats = orchestrator.Synchronize();
                    return stats;            
        }

我不知道为什么,但我的服务器db总是赢,不管服务器是localProviderRemoteProvider,并重写客户端数据,但我想使设置始终是客户端获胜。

但是我不明白MS Sync Framework是怎么做到的。

我需要设置什么?

谢谢!

同步框架客户端必须赢得场景

在同步框架中,您可以在同步提供程序上指定冲突解决策略,如MSDN上所述:

Microsoft Sync Framework默认支持一些简单的冲突解决方案。您可以配置提供者的冲突解决策略,同步框架将为您执行冲突解决。默认情况下,同步框架支持以下五种冲突解决策略:

源副本优先:如果存在冲突,源副本总是优先。

Destination wins:如果存在冲突。

合并:将源和目标的更改合并合并以形成该项的新版本,然后将其发送到要应用的目的地

Log:冲突被忽略方法的saveconconflict事件发送冲突项信息类实现INotifyingChangeApplierTarget.

推迟:完全忽略冲突,目标存储将不会接收关于冲突的信息。

所有这些冲突解决策略都适用于项目级别,但只有源胜利和目标胜利适用于会话。通过设置ConflictResolutionPolicy属性为提供者指定同步策略。

destinationProvider.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.DestinationWins;

所以你不能直接指定你想要客户端还是服务器赢得所有时间,因为这取决于数据同步的方向,以及哪个提供程序是源/目的地。

您还可以编写自定义提供程序并覆盖冲突解决事件,以指定更复杂的自定义冲突处理。关于这个问题的讨论可以在这里找到:http://msdn.microsoft.com/en-us/library/windows/desktop/dd317247%28v=VS.85%29.aspx.