2011-08-02 4 views
0

Nous trions de nous-mêmes une balle dans le pied sur un site client en ce qui concerne le Microsoft Sync Framework lors de la résolution d'un problème de production particulière ...Délestage Les bases de données de synchronisation côté client

Nous avons un serveur central que les données système d'enregistrement qui expose un service WCF sur lequel nous utilisons Sync Framework 2.0 pour synchroniser les données avec les instances client déconnectées. (Beaucoup de détails de l'implémentation sont inconnus, c'est une base de code héritée.) Lors du dépannage d'un problème sur la machine d'un utilisateur à un moment donné, il a été décidé de supprimer la base de données locale d'un client particulier et de la remplacer par bonne copie d'un autre client.

Tout semblait pour fonctionner pendant un certain temps. Mais il y avait un détail dans la mise en œuvre qui nous était inconnu à l'époque. La synchronisation suit en interne l'identité de la base de données client. Cela signifiait que le serveur ne pouvait pas distinguer les deux clients. Donc, on synchroniserait leurs données et ensuite l'autre serait laissé dans un état inconnu.

Nous avons identifié des utilisateurs affectés, nous identifions des données affectées et nous réfléchissons à des solutions potentielles. Pour cette dernière partie, je me demande si quelqu'un ici a de l'expérience avec Sync Framework et peut suggérer un plan d'action potentiel?

Une approche potentielle que nous considérons est d'identifier où et comment Sync suit cette identité en interne (peut-être un GUID quelque part?) Et de le changer. Cela semble être le correctif le plus rapide, même si cela nous laisse au moins la nécessité de toucher à nouveau les enregistrements concernés pour les synchroniser de nouveau. Nous ne voulons pas risquer de perdre des données, nous hésitons donc à supprimer les bases de données client et à les réapprovisionner. Mais plus encore, le processus de provisioning d'une nouvelle base de données est un coup important pour les ressources et les temps d'arrêt des utilisateurs dans l'installation actuelle, donc c'est quelque chose à éviter si possible.

Quelqu'un a-t-il de l'expérience avec Sync Framework? Quelqu'un a-t-il déjà fait face à ce problème? Quelles voies d'approche suggérez-vous?

+0

qui utilisez-vous (SqlSyncProvider/SqlCeSyncProvider? Ou SqlCEClientSyncProvider/DbServerSyncProvider?) Et quelle base de données est sur le client (CE? Express?)? – JuneT

+0

@JuneT: SqlSyncProvider avec SQLExpress sur le client. – David

Répondre

1

Votre idée semble ok, mais au moins obtenir un sentiment des risques encourus, vous devez vous assurer que la base de code hérité ne contient pas de « surprises » ... s'il vous plaît fournir plus d'informations:

  • Quel "fournisseur de synchronisation" est utilisé? DB/Fichier/Personnalisé? Quelles sont les "règles de résolution de conflits" implémentées/configurées?
  • Quelle version du framework? 2.0 ou 2.1?

EDIT - selon les commentaires:

Je ne suis pas sûr à 100% - s'il vous plaît teast cette première sur un client et vérifier les résultats!
Remplacez d'abord le client GUID sur le client qui a accidentellement obtenu une copie d'un autre client (sinon le «bon fonctionnement» est foiré!).
Ensuite, appelez PerformPostRestoreFixup pour ce client db.
pour certains plus de détails, voir
http://msdn.microsoft.com/en-us/library/ee617375.aspx
http://msdn.microsoft.com/en-us/library/bb726041.aspx

+0

SqlSyncProvider. Je ne suis pas familier avec les règles de résolution de conflit, comment pourrais-je le découvrir? Version 2.0 – David

+0

Depuis que je ne connais pas la source c'est difficile à dire ... mais ces questions pourraient aider: les clients mettent-ils à jour leur copie DB? Quelque chose est-il synchronisé entre les clients et le serveur central? – Yahia

+0

Oui. Chaque table de base de données est dans l'une des quatre étendues configurées, à partir de ce que je peux dire: Victoires du client, Victoires du serveur, Derniers gains, Résolution des conflits. Les trois premiers sont assez explicites, et le dernier va dans un code personnalisé avec lequel je ne suis pas entièrement familier. Mais il finit essentiellement sur un écran d'administration avec un diff entre les deux enregistrements et un utilisateur doit sélectionner celui à conserver. Ainsi, la complexité de ce problème semble être dans la façon dont nous préservons les données qui ne sont pas synchronisées, et le préservons d'une manière qui ne rompt pas davantage la synchronisation. – David

0

malheureusement, ce ne est pas seulement une question de remplacement Guids sur les tables de portée. Si vos clients sont sur SqlServer ou SqlExpress, vous pouvez exécuter PerformPostRestoreFixup et Sync Framework ajusteront l'ID du client et la carte de la réplique pour vous.

la prochaine fois que vous initialisez un client à l'aide d'une sauvegarde d'un autre client, assurez-vous d'exécuter PerformPostRestoreFixup sur la copie restaurée.

dans votre cas où les clients sont potentiellement désynchronisées déjà, vous pouvez avoir à faire une vérification après fournisseurs de bases de données PerformPostRestoreFixup

Questions connexes