【问题标题】:Sync Framework: conflicts not being handled in SimpleSyncProvider同步框架:SimpleSyncProvider 中未处理冲突
【发布时间】:2012-04-03 15:46:41
【问题描述】:

我已经实现了一个似乎没有处理冲突的FullEnumerationSimpleSyncProvider

在构造函数中我设置了以下属性:

this.Configuration.CollisionConflictResolutionPolicy = CollisionConflictResolutionPolicy.ApplicationDefined;
this.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.ApplicationDefined;

this.ItemConstraint += new EventHandler<SimpleSyncItemConstraintEventArgs>(OnItemConstraint);
this.ItemConflicting += new EventHandler<SimpleSyncItemConflictingEventArgs>(OnItemConflicting);

我的约束和冲突事件处理程序:

void OnItemConstraint(object sender, SimpleSyncItemConstraintEventArgs e)
{
    e.SetResolutionAction(ConstraintConflictResolutionAction.Merge);
}

void OnItemConflicting(object sender, SimpleSyncItemConflictingEventArgs e)
{
    e.SetResolutionAction(ConflictResolutionAction.Merge);
}

但是,当我在 InsertItem() 中报告冲突时,永远不会调用约束/冲突事件处理程序。

public override void InsertItem(
        object itemData, 
        IEnumerable<SyncId> changeUnitsToCreate, 
        RecoverableErrorReportingContext recoverableErrorReportingContext, 
        out ItemFieldDictionary keyAndUpdatedVersion, 
        out bool commitKnowledgeAfterThisItem) {

            // ...snip...

            // Check if it is already there --- name collision
            if (itemAlreadyExists)
            {
                recoverableErrorReportingContext.RecordConstraintError(ConstructDictionary(item.ID));
                keyAndUpdatedVersion = null;
                commitKnowledgeAfterThisItem = false;

                return;
            }

            // ...snip...
}

我认为当调用RecordConstraintError 时,同步框架会在InsertItem 退出后调用适当的事件处理程序。

任何见解将不胜感激!

【问题讨论】:

  • 您解决了这个问题吗?几天来我一直在与同样的问题作斗争。

标签: microsoft-sync-framework syncfx


【解决方案1】:

如果您正在处理并发冲突并将 SetResolutionAction 设置为 ConflictResolutionAction.Merge,那么您的提供商需要实现 ISimpleSyncProviderConcurrencyConflictResolver 接口(ResolveUpdateUpdateConflict、ResolveLocalDeleteRemoteUpdateConflict 和 ResolveLocalUpdateRemoteDeleteConflict。)

如果您正在处理约束冲突并将 ConstraintConflictResolutionAction 设置为 Merge、RenameDestination 或 RenameSource,那么您的提供程序需要实现 ISimpleSyncProviderConstraintConflictResolver 接口。

Microsoft Sync Framework Simple Provider – Concurrency Conflict Handling

【讨论】:

  • 问题不在于实现接口。问题是,当既不使用可恢复错误报告上下文.记录约束错误也不使用可恢复错误报告上下文.记录可恢复错误ForChange时,委托永远不会被提出。如果这些问题从未出现,我们应该如何解决同步问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多