2009-06-19 10 views
0

Je suis en train de développer une application Silverlight et j'ai besoin de synchroniser une liste dans différentes instances Silverlight qui peuvent être hors ligne. Je vais avoir un serveur en ligne pour les synchroniser.Synchronisation Silverlight

On peut donc imaginer ceci:

PC1: A1 A2 A3

PC2: A1 A2 (A3 supprimé)

serveur: A1 A2 A3 (supprime A3 pour refléter PC2 et puis met à jour pc1 pour également supprimer)

Il doit également refléter la réorganisation des éléments. Je vais vouloir l'utiliser avec Silverlight en ligne et hors ligne (hors du navigateur).

L'un de vous a-t-il résolu un problème similaire à celui-ci? Quelles sont les bonnes approches?

Merci, Artur

+0

Pouvez-vous clarifier votre question? Je ne suis pas exactement sûr de ce que vous entendez par "différentes instances Silverlight qui peuvent être hors ligne" –

+0

@Jason: Je pense qu'Artur signifie qu'il a deux utilisateurs qui exécutent une application Silverlight en éditant la même liste. Il veut que les modifications se produisent instantanément sur le client, même s'il n'y a pas de connexion avec le serveur. Lorsque la communication est restaurée, il souhaite synchroniser la liste avec le serveur, puis les autres clients doivent voir les modifications. –

+0

C'est exactement ça Scott. –

Répondre

2

Dans un environnement déconnecté normal, vous devriez utiliser quelque chose comme la synchronisation des services pour gérer, mais c'est un peu lourd poids à avoir sur le client Silverlight.

Je commencerais par donner un GUID à chaque élément de la liste. Ensuite, je maintiens un journal des insertions, des mises à jour et des suppressions de la liste sur chaque client et sur le serveur. Ensuite, chaque fois qu'un client se connecte au serveur, vous devez effectuer une synchronisation de fusion. Dans ce cas, vous devez détecter et gérer des conflits:

  • Quelqu'un édite un élément, alors qu'une autre personne supprime
  • Deux clients modifier un élément simultanément

Votre exigence de traiter réordonnancement de les éléments ajoute de la complexité. Vous souhaiterez peut-être enregistrer une réorganisation en tant qu'action «déplacé avant l'élément x» ou «déplacé après l'élément x» plutôt que de mettre à jour tous les index de tous les éléments de la liste.

+0

Scot, merci pour la réponse. Je regarde Microsoft Sync Framework et il semble que je vais devoir mettre en œuvre les choses de synchronisation comme vous le dites. J'essayais de l'éviter. Je stocke les éléments dans une liste, donc je peux dire InsertAt (x) et le problème est résolu. –

+0

@Artur: vous essayez fondamentalement d'implémenter un algorithme optimiste où vous supposez que la plupart des mises à jour ne seront pas en conflit. Cependant, le serveur doit encore faire beaucoup de travail pour s'assurer de détecter les conflits, les arbitrer, puis mettre à jour les clients pertinents avec les changements. Cela signifie qu'après qu'un utilisateur a effectué un changement et qu'il pense qu'il est validé, et que le serveur doit remplacer cette modification, l'utilisateur doit recevoir un message indiquant que sa modification a été écrasée ou perdue. –