Sync Framework:SimpleSyncProvider中未处理冲突

时间:2012-04-03 15:46:41

标签: microsoft-sync-framework syncfx

我已经实现了一个似乎没有处理冲突的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退出后调用相应的事件处理程序。

非常感谢任何见解!

1 个答案:

答案 0 :(得分:0)

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

如果处理约束冲突并将ConstraintConflictResolutionAction设置为Merge,RenameDestination或RenameSource,则提供者需要实现ISimpleSyncProviderConstraintConflictResolver接口。

Microsoft Sync Framework Simple Provider – Concurrency Conflict Handling