« Info »

Applications connectés/déconnectés avec la réplication transactionnelle SQL Server 2005

25 février 2007

Il y a quelque temps je cherchais a mettre en place une architecture d’application connectée/déconnectée !
Typiquement j’ai plusieurs clients qui se connectent à un serveur de base de donnée pour centraliser leurs données ! Mais ces clients sont mobiles et n’ont pas toujours de connectivité. Ils doivent donc posséder une version locale du serveur la plus a jour possible pour continuer a travailler et se synchroniser avec le serveur dès qu’ils retrouvent la connexion pour mettre a jour les données modifiées en local pendant la déconnexion et répliquer les nouvelles données du serveur.

L’application est lourde, difficile de revenir dans le code, trop de boulot ! Je me suis donc débarrassé du problème en laissant SQL Server 2005 le gérer pour moi !

Pour cela, sur le serveur central (avec un SQL Server 2005 Standard ou +) la base de donnée a été publié au travers une « Publication transactionnelle prenant en charge les abonnements mis à jour » dans les outils de réplication que propose SQL Server 2005.
Il ne reste plus qu’a installer SQL Server 2005 Express (et gratuite :) ) et de venir l’abonner à la publication du serveur central.
L’application n’a plus qu’a venir taper sur l’instance sqlexpress locale et MSSQL gère le reste :)
Elle est pas belle la vie ?? Encore faut-il arriver a configurer le tout… :p

Pour cela il nous faut :

  • 1 serveur avec SQL Standard ou +
  • X client(s) possedant une instance d’SQL (SQL Express fait très bien l’affaire !)
  • SQL Studio Management Standard/Express pour configurer tout ça (bien que des scripts peuvent être réalisé pour un déploiement plus simple !)

Les étapes pour mettre tout ça en place :

1er étape : connexion et résolution de nom
Libre à vous de choisir la connexion avec votre serveur. Pour ma part les clients étaient connectés via un simple VPN Windows pour garantir un 1er niveau de sécurité. Mais après il ne faut pas oublier la résolution des noms NETBIOS ! Il faut d’une part que votre client sache résoudre le nom du serveur MAIS AUSSI que votre serveur sache résoudre le nom du client. Pour cela le plus sûr et simple est d’installer un serveur WINS sur le serveur. Vous trouverez WINS dans « Ajout et supp. de programme » sur votre serveur Windows 2000 ou 2003. Sur les clients il faudra juste dans les options avancées TCP/IP de votre connexion, entrer l’IP de votre serveur WINS.
A Savoir : dans le cas d’un adresse IP dynamique (DHCP) de vos clients, il faut garder a l’esprit le processus de résolution de noms par Windows :

  1. Interrogation du cache local (sachant que la durée de vie d’un enregistrement est de 10min)
  2. Interrogation du serveur WINS
  3. Broadcast sur le réseau
  4. Interrogation du fichier local LMHOST

Ce qu’il faut en retenir, c’est que si votre client vient a perdre la connexion puis se reconnecte sous une adresse IP différente, il se peut que votre serveur ne puisse pas résoudre son nom pendant moins de 10min, le temps que l’ancien enregistrement dans son cache local expire !

2ème étape : SQL Server sur le réseau Par défaut un SQL Server 2005 Standard ou + est configuré pour accepter les connexions distantes mais ce n’est pas le cas de la version express qui par défaut n’accepte que les connexions locales.

Pour cela dans « SQL Server 2005 Surface Aera Configuration » > « Service and connections » : autoriser les connexions locales et distances TCP/IP et par « pipe ».

Ensuite dans MMC « SQL Server Configuration Manager » vérifier que le protocole TCP/IP dans la configuration réseau de votre instance SQLEXPRESS est bien activé.

Pour finir, relancer votre instance SQM et activer le démarrage automatique d’ SQL Browser et lancer-le !

A ce stade, vous devez être en mesure de vous connectez du client sur le serveur et du serveur sur le client !

3ème étape : MSDTC et le réseau MSDTC pour Microsoft Distributed Transaction Coordinator doit être lancé sur le client ET serveur pour permettre la réplication. Pour cela, dans « Services » dans outils d’administration, activé le démarrage automatique de ce serveur et lancer-le !

Il faut aussi que votre serveur et client autorisent les connexions à distances.
Pour cela, toujours dans les outils d’administration, dans « Services de composants » accéder aux propriétés de votre « Poste de travail ».

Sous l’onglet « MSDTC » > « Configuration de la sécurité » :

Pour activer les options suivantes :

Notes : A ce stade, les préliminaires pour mettre en place la réplication transactionnelle sous SQL Server 2005 est OK. Du coté du firewall il faut ouvrir le port SQL (1433) et MSDTC (process msdtc.exe) coté serveur comme client

4ème et 5ème étape : Configuration de la publication coté serveur et de l’abonnement du client
Pour cela je vois renvoi sur un article de Fabrice publié sur ASP-PHP ici. Bien que le type de publication ne soit pas la même la configuration est quasi-identique a part qu’il vous faudra prendre le type « Publication transactionnelle prenant en charge les abonnements mis à jour » et non « par capture instantanée » comme dans l’article.
De plus lors de la configuration de l’abonnement (coté client), il faudra définir a « en attente » la « méthode de mise a jour » :)

Quand tout s’est déroulé avec succès, votre client récupèrera toute la base (ce qui peut être long la 1er fois, tout dépends de la taille de votre base !). Puis amusez-vous a mettre faire des modifications en local en connecté/déconnecté et voyez comment les autres clients se synchronisent !

Certes dans certaine application ça a ses limites (pas de contrôle réelle sur la synchronisation, régle de « si pas modifié, je peux injecter mes données » qui peut provoquer pas mal de perte de donnés si il y a beaucoup de mise a jour, etc..etc..) mais pour ma part ça répondait aux besoins donc expédié avec 0 lignes de code (enfin si 1: la connString dans le App.config :p) et quelques heures recherches/configuration/tests :)

Merci Mr SQL :)

Microsoft ASP.NET AJAX – VERSION 1.0

24 janvier 2007

C’est bon, c’est là officiellement, la version 1.0 du framework anciennement appelé Atlas :)

With ASP.NET AJAX, you can:

  • Create next-generation interfaces with reusable AJAX components.
  • Enhance existing Web pages using powerful AJAX controls with support for all modern browsers.
  • Continue using Visual Studio 2005 to take your ASP.NET 2.0 sites to the next level.
  • Access remote services and data directly from the browser without writing a ton of complicated script.
  • Enjoy the benefits of a free framework with 24×7 technical support provided by Microsoft.

Le lien : http://ajax.asp.net/

Vous trouverez sur ce post le HOL (basé sur la RC1) pour démarrer tout en douceur avec ce framework. Et en parcourant mon blog (catégorie Atlas), vous trouverez d’autres ressources (mais attention basé sur des versions antérieures !)..

A noter aussi, la version finale des Control Toolkit (avec notamment 2 super nouveaux contrôles : Calendar et MaskedEdit) et le ASP.NET AJAX January Futures CTP disponible sur la page de téléchargement : http://ajax.asp.net/downloads

Bon moi, j’ai du boulot pour migrer mes applications web Ajax sur mon serveur (resté encore en Beta2) vers cette nouvelle version :)

(update: n’oubliez pas de virer la balise tagMapping qui permettait d’implémenter les controls de base d’ ASP.NET v2 et d’utiliser ceux fournis par Atlas ! Ceci est obsolète, donc viré le de votre Web.config :) sinon vous allez découvrir une bonne centaine d’erreur à la compilation !)

Coup de coeur : Projet OR.net

22 janvier 2007

Ca va faire un petit mois que j’ai découvert OR.net et que j’utilise de plus en plus dans mes développements perso. Je viens de voir ce matin qu’une nouvelle version vient de sortir (version 3.1) :)

Coté news, les versions 3.x (3.0 puis 3.1 très rapidement) apportent surtout le support d’autres providers pour pouvoir fonctionner sur des bases Oracle, DB2, etc.. et quelques corrections de bugs ce qui m’a un peu déçu pour une cette nouvelle version majeure (moi qui attendais une meilleure GUI et le support des procédures stockées, j’attendrais encore un peu :) )

Enfin ça n’enlève rien que cet outil est vraiment génial sur le plan simplicité, flexibilité et surtout qualité du code produit :)

Pour le présenter rapidement, OR.net comme son nom l’indique est ORM (Object Relational Mapper) permettant à partir d’une base de donnée de générer tous les objets métiers ainsi que la DAL permettant de persister et récupérer des objets ou collections d’objets !

Ses fonctionnalité sont :

Class Definitions

  • Composite Identity Keys
  • SQL Server Identity Columns (database-managed columns)
  • Nullable Types

Composite Relationships

  • Foreign-Key Relationships
  • Many-Many Mapping Table Relationships
  • All .NET Collections (Generic and Non-Generic)
  • Lazy Loading

Transaction Management

  • Simple SQLTransaction
  • TransactionScope Distributed Transactions

Miscellaneous

  • Complete Visual Studio IntelliSense Documentation (generated with the libraries)
  • Appropriate .NET data-types suggested for DBMS columns of any type
  • Criteria objects providing for standard queries to be executed in a strictly OO manner
  • Templates to allow for easy creation of custom, advanced queries
  • Fine grained control to persist only certain, specific components of an object – minimizes DB traffic
  • Ability to save, and later re-open a project in order to make changes, and re-generate code

Coming Soon

  • Support for Stored Procedures
  • Updated Back End (will support Oracle much more easily)

Je n’irai pas très loin dans ce post, mais je vous invite a lire cet article sur Code Project qui présente bien l’outil.

Et bien sûr, la documentation officielle à lire absolument pour ceux qui voudrais allez un peu plus loin dans l’utilisation de cet outil !

Pour donner mon avis :

Les PLUS :

  • Utilisation très simple (GUI et code généré)
  • ORM complet
  • Full .NET 2.0 (utilisation des collections génériques)
  • Code propre et pur (la seule assembly à référencer est System.Transactions)
  • Gestion des transaction (SqlTransaction ou TransactionScope)
  • Classes de critères pour la recherche
  • Code documenté
  • Méthodes d’exemple (squelette) pour pouvoir rajouter nos propres méthodes très simplement
  • Gestion de la persistance de l’objet seul, complet ou des tables de relation seulement.

Les MOINS :

  • GUI bien que simple n’est top top. Il faut tout définir…
  • Pas de génération des procédures stockées
  • Beaucoup beaucoup de lignes de code générées (enfin comme c’est du beau code…. ça passe :)

Bref, je n’ai qu’un mot, développeur .NET : ESSAYEZ LE !! Ca en vaut la peine :)

Petite précision de dernière minute : l’outil est gratuit et open-source ! Enjoy :)

En vrac :)

22 janvier 2007
  • Les Hands On Labs pour ASP.NET AJAX

Plus d’excuse pour ne pas vous mettre à l’AJAX. Ce HOL disponible en version Fr vous montrera l’installation d’ASP.NET AJAX et son utilisation de base (ScriptManager, UpdatePanel) à travers une petite application ASP.NET 2.0 (site très simple d’ e-commerce), l’utilisation des contrôles Toolkit, des contrôles de la « Futures CTP » (Drag & Drop, Profile, etc..) et comment créer son propre contrôle Extender ASP.NET AJAX.
Bref 38 pages de pur bonheur à télécharger d’urgence pour qui ne l’aurait toujours pas fait :)
Tout ce trouve ici : http://www.corti.com/WebLogSascha/…..


Je cite :

Et comme son nom l’indique, cette version est dédiée à créer un serveur personnel à la maison. Son utilisation est ultra simple. Il suffit de brancher et le reste s’effectue de façon quasi automatique. Il back-up notamment en heure creuse l’ensemble des données des PC de la maison et permet une restauration rapide en cas de problème. Il se back-up d’ailleurs lui-même :-) . J’ai eu l’occasion de « jouer » un peu avec cette version et le résultat, même dans les versions très préliminaires est positivement surprenant.

Bref ca a l’air marrant, même si je ne lacherais pas mes 2 bons gros serveurs pour ce petit boitier :) Plus d’infos sur son blog

  • Perceptive Pixel

Découvert sur le blog de Rédo sur base d’un post sur On10 nous montre une vidéo assez impressionnante : A VOIR D’URGENCE !!

Le nouveau bureau du futur ? Cliquez ICI

  • TechDays et concours de blogging

Quoi vous n’êtes toujours pas inscrit ?? Dépêchez-vous, la date approche :)

Et bloggez sur l’évènement ! Les meilleurs bloggeurs pourront gagner une édition de Windows Vista, une édition de la version 2007 d’Office, un ensemble Clavier/Souris Bluetooth, une souris laser, un superbe tee-shirt dédicacé par l’équipe TechDays ! :) Plus d’infos sur le concours sur le blog du TechDays

  • Windows Vista sortie pour le grand public J-8

Une soirée aura lieu le 30 Janvier organisée par Microsoft France sur le parvis de La Défense à Paris (lire le post de Redo)
Des ateliers techniques sont disponibles sur TechNet pour se former rapidement et simplement à ce nouveau système : Ateliers Windows Vista
Au fait saviez-vous que la NSA a travaillé avec MS pour sécuriser l’OS (voir ici) :)

  • Coté RAD

J’ai enfin installé la semaine dernière CodeRuch depuis le temps que l’on m’ en parle !! Vraiment sympa comme outil, la prise en main est aisé avec le module de Training : bref à tester (mais seulement pendant 30jours :( ) – Voir la video de présentation (toutes les videos)
A tester aussi, DevForce d’ IdealBlade qui propose d’une part un générateur de DAL/ORM, et d’autre part, des contrôles de DataBinding Winform avancés permettant de créer l’interface graphique sur base d’ objet métier. Vraiment sympa, mais j’aime bof le fait de devoir rajouter plein d’assembly propriétaire sans le code source :) Voir la vidéo de présentation

Une bonne journée à tous :)

Visual WebGUI

21 janvier 2007

Comme inscrit sur la homepage du site officiel :

Visual WebGui is an AJAX development framework that simplifies development of enterprise IT web applications to the simplest.

En fait pour être plus précis, le framework Visual WebGui propose un modèle de développement Winform, avec un designer Winform où l’on crée nos Forms, Dialogs ou UserControls avec des contrôles de type Winform (Label, Textbox, DateTimePiker, Listbox, combobox, etc…).

En gros on développe une application Winform MAIS au lieu de compiler un EXE, nous obtenons une application Web assez jolie avec AJAX inside pour gérer les contrôles.

Bien sur il ne faut pas trop regarder le HTML/Javascript produit surtout pour les amoureux des standards (et du beau code), et même si ce produit a encore pas mal de chose à revoir, je pense qu’il a un bon avenir dans le monde du développement d’application Web enfin Web 2.0 :)

J’avais commencé la semaine dernière a créer un petit projet de test, une application de gestion de taches (gestion projets/milestones/taches). La rapidité de développement est assez impressionnante. Après avoir créé ma base SQL et DAL, il m’a fallu peu de temps pour placer mes contrôles (un tabControl, quelques listbox, textbox et button), un peu de code et créer une belle petite application Web.

A défaut d’avoir déployée l’application sur mon serveur de prod, une petite vidéo de présentation :

Bref, produit assez sympa, qui me rappelle Xamlon qui passé du Winform au Flash :)