同步框架客户端必须赢得场景
本文关键字:框架 客户端 同步 | 更新日期: 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总是赢,不管服务器是localProvider
或RemoteProvider
,并重写客户端数据,但我想使设置始终是客户端获胜。
但是我不明白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.