2012-04-03 4 views
1

Ich habe eine FullEnumerationSimpleSyncProvider implementiert, die Konflikte nicht zu behandeln scheint.Sync Framework: Konflikte werden nicht in SimpleSyncProvider behandelt

Im Konstruktor ich die folgenden Eigenschaften festgelegt haben:

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

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

Meine Event-Handler für Zwänge und Konflikte:

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

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

Allerdings, wenn ich einen Konflikt in InsertItem berichten() der Einschränkung/Konfliktereignishandler werden nie aufgerufen.

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... 
} 

dachte ich, wenn RecordConstraintError der Sync Framework den entsprechenden Event-Handler aufrufen würde Aufruf nach InsertItem verlassen.

Jeder Einblick würde sehr geschätzt werden!

+0

Haben Sie dieses Problem behoben? Ich kämpfe seit Tagen mit demselben Problem. – jacktric

Antwort

0

Wenn Sie Concurrency Konflikt und setzen SetResolutionAction zu ConflictResolutionAction.Merge sind, dann müssen Ihren Provider ISimpleSyncProviderConcurrencyConflictResolver Interface (ResolveUpdateUpdateConflict, ResolveLocalDeleteRemoteUpdateConflict und ResolveLocalUpdateRemoteDeleteConflict.)

Wenn Sie Umgang mit Zwang Konflikt und setzen ConstraintConflictResolutionAction entweder implementieren Merge, RenameDestination oder RenameSource, dann muss Ihr Provider die Schnittstelle ISimpleSyncProviderConstraintConflictResolver implementieren.

Microsoft Sync Framework Simple Provider – Concurrency Conflict Handling

+1

Das Problem besteht nicht darin, Schnittstellen zu implementieren. Das Problem besteht darin, dass der Delegat nie ausgelöst wird, wenn weder recoverableErrorReportingContext.RecordConstraintError noch recoverableErrorReportingContext.RecordRecoverableErrorForChange verwendet werden. Wie sollen wir das Synchronisationsproblem lösen, wenn diese Probleme niemals auftreten? –

Verwandte Themen