2012-04-03 84 views
1

我已经实现了一个FullEnumerationSimpleSyncProvider,似乎没有处理冲突。同步框架:在SimpleSyncProvider中没有处理冲突

在我已经设置了下列属性的构造:

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退出后想通。

任何有识之士将不胜感激!

+0

你是否修复过这个问题?我在同一个问题上奋战了几天。 – jacktric 2017-03-04 16:55:13

回答

0

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

如果你正在处理约束冲突,并设置ConstraintConflictResolutionAction要么合并,RenameDestination或RenameSource,那么你的提供者需要实现ISimpleSyncProviderConstraintConflictResolver接口。

Microsoft Sync Framework Simple Provider – Concurrency Conflict Handling

+1

问题不在于实现接口。问题在于,在使用recoverableErrorReportingContext.RecordConstraintError和recoverableErrorReportingContext.RecordRecoverableErrorForChange时,从未引发委托。如果这些问题从未出现过,我们应该如何解决同步问题? – 2012-11-19 16:20:50