lundi 18 février 2008

Techdays 2008 : ADO.Net Sync Services

Solutions Online/OffLine avec ADO.Net Sync Services
Session présentée par
Sébastien Pertus de Bewise

Sébastien est très interessant, connait très bien son sujet, session très agréable et instructive.
Successeur du Remote Data Access, ce framework, développé sur MSF, permet la synchronisation de données, et peut se décliner en plusieurs thèmes : Cache local/Mode Deconnecté/Synchronisation/Collaboration.

On trouve la V2 du framework en CTP ici.

Côté Serveur, on a un provider ADO.NET (donc potentiellement de l'Oracle, SQL Serveur, MySQL, ...)
Côté Client, on a SQL Server CE ou d'autre DB embarquée
Sync Designer est un concepteur graphique, n'est pas obligatoire mais permet, quand on travaille avec SqlServeur, de gagner en productivité.

Cache local

Cela se fait simplement en récupérant les data sur une base de data locale (Local Database Cache), en fait un SQL Server Compact 3.5 et gère le cache et la synchronisation des données.

Synchronisation

L'idée est de remplacer le classique DataAdapter par un SyncAdapter. Il comporte les mêmes méthodes que le DataAdapter plus des méthodes de commandes incrémentales et de gestion de conflit. Voir l'article de sébastien pour le détail.
Le travail est déporté sur une base locale, le SyncAdapter faisant la liaison avec le DataBase server.
SyncDesigner génère le code pour SQL Server 2000/2005. On peut se servir du code généré et l'adapter pour d'autres providers. Sync Designer ne sait pas gérer les relations entre entités, il faut le faire directement dans le xsd.

Au premier appel client, le serveur génère une ancre (un TimeStamp ou un DateTime) qu'il envoit au client. Puis la synchronisation s'appuie de part et d'autre à cette ancre.

Par défaut la synchronisation ne se fait que du serveur vers le client. Pour avoir du bidirectionnel il suffit de rajouter une ligne de code par table à synchroniser

SqlSyncAdapterBuilder builder = new SqlSyncAdapterBuilder();
builder.SyncDirection = SyncDirection.Bidirectional;

Personnalisation

On peut se passer du Sync Designer et écrire tout à la main. Comme par exemple créer la base locale à la volée,... Tout est retranscrit ici.

Sync Services & WCF

Une info en passant wcfsvchost permet de hoster les services WCF sans passer un site web pour l'hébergement.
Sync Services s'appuie sur une archicture WCF, le Sync Agent côté client prenant comme paramètre du constructeur le proxy du service XCF.

SQL Serveur 2008 & ChangeTracking

Pour permettre la synchronisation de bases, il faut mettre un peu de plomberie dedans via le wizard de Visual Studio: des triggers, des tables tombstone. Ou de s'en affranchir en utilisant le change tracking de la nouvelle version de SQL Serveur 2008.
Des benchmarks ont été fait sur le change tracking et l'impact en performance semble de même ordre de grandeur que l'ajout d'un index secondaire et donc moins que des triggers.

On également peut lire une introduction par Microsoft ici et un webcast sur Channel9.

Aucun commentaire:


Laurent Morisseau, auteur de ce blog, pour me contacter