Publier un service en .NET

Si vous avez suivi mes billets sur le sujet, vous devez probablement vous demander quelle pile utiliser pour exposer un service en .NET: WCF ? .NET Ria services ? ADO.NET Data Services ?

Et bien Microsoft va unifier ces piles dans le framework 4 en proposant des extensions de WCF. Au passage, un renommage s’impose :

  • ADO.NET Data Services (anciennement Astoria) devient WCF Data Services
  • .NET RIA Services devient WCF RIA Services

Voici l’annonce de Mike Flasko.

Référencement d’une application Silverlight

Je l’avais rapidement évoqué dans ce billet. David Rousset le détaille ici.

Si vous cherchez dans Bing avec la requête suivante http://www.bing.com/search?q=pizza+ind%C3%A9cis&filt=all ou dans Google avec http://www.google.fr/search?q=pizza+ind%E9cis, vous allez probablement trouver l’application de David déployée dans le Cloud : http://cloudypizza.cloudapp.net/Pizza.aspx?Name=Pizza+des+indecis#/Pizzas

Si votre navigateur ne supporte pas Silverlight, vous obtiendrez une version Web. Sinon vous obtiendrez grâce au deep-linking une page Silverlight présentant la pizza des indécis.

En fait, c’est très simple: la page Web qui est indexée fournit des informations au PlugIn Silverlight en lui demandant de charger telle ou telle page.

RIA : Silverlight 3 disponible

La version finale de Silverlight 3 est disponible. Scott Guthrie l’a annoncé ce matin.

J’ai testé quelques fonctionnalités dans la version beta qui manquaient cruellement dans la version 2:

  1. Des contrôles (classiques) de saisie pour les applications de gestion de données avec un bon support pour la validation des données et la notification des erreurs de saisie (c’était possible dans la version 2 mais cela demandait un peu plus de travail)
  2. Un framework de navigation permettant entre autres le deep-linking et donc la possibilité de référencer une page de l’application

On peut également noter la possibilité d’utiliser .NET Ria Services.

Avec ces nouveautés, Silverlight devient une vraie alternative à Adobe Flex.

Premières impressions avec .NET RIA Services

Chose promise, chose due ! Je vous livre mes premières impressions sur les tests que j’ai réalisés avec .NET RIA Services, maintenant renommé WCF RIA Services. Pour l’instant j’ai beaucoup de bonnes surprises…

J’ai commencé par la validation des formulaires.
Je souhaitais vivement regarder la validation des formulaires. L’infrastructure utilisable en Silverlight 2.0 me plaisait beaucoup mais manquait d’une couche d’industrialisation. Pour rappel, cette validation nécessitait les actions suivantes:

  1. Déclarer une liaison de données en mode TwoWay avec notification d’erreurs de validation (généralement dans le XAML). Pour une TextBox liée à la propriété Commentaire d’un objet source, ça donne: textboxbindee
  2. Lever une exception dans le converter ou dans la méthode set de la propriété de l’objet source si la règle de validation n’est
  3. Récupérer l’évènement BindingValidationError. En général, on utilise alors le VisualStateManager pour passer le contrôle courant dans l’état Erreur qu’il aura fallu définir au préalable.

DataForm

Puisqu’on souhaite systématiquement passer dans l’état Erreur du contrôle, on pourrait avoir un contrôle conteneur écrit une fois pour toute qui supporte ce scénario. C’est le DataForm qui est disponible en Silverlight 3.0.

Méta données et validation

Redéfinir les méthodes set des propriétés des objets sources n’est pas forcément facile lorsqu’on travaille avec des proxies issus d’un WSDL ou d’un service ADO.NET Data Services. Par ailleurs, lorsqu’on a goûté à Hibernate Validator, on aime bien définir les règles de validation avec des annotations. Avec .NET RIA Services, c’est maintenant possible. Il faut définir une méta-classe dans laquelle on définit les règles de validation avec des annotations. En tirant avantage des classes partielles de .NET, on indique la méta classe à utiliser sans risque que le générateur écrase nos modifications. J’entends déjà les puristes se demander pourquoi les annotations ne sont pas directement placées sur les propriétés. C’est justement pour éviter d’avoir des conflits avec le générateur de code. Cette stratégie est très efficace.

La méta classe associée à la classe métier Project
La méta classe associée à la classe métier Project

Ces annotations sont définies coté serveur et projetées coté client pendant la phase de compilation du projet. WCF Ria services peut donc exploiter ces annotations coté client pour gérer la validation de surface sans avoir à réaliser un aller-retour sur le middle tier.

CRUD et méthodes complexes

Autre dilemme lorsqu’on travaille sur une application de gestion de données en RIA : les données doivent-elles être exposées en mode RESTFull ou en mode SOAP (sous-entendu contrat de service). Très clairement, lorsqu’on travaille sur du CRUD, le RESTFull est très pertinent. Inversement, lorsque les règles métiers sont importantes, le contrat de service a toute sa place. C’est notamment le cas lorsqu’il faut implémenter des règles de validation complexes qui ne dépendent pas seulement des données fournies par l’utilisateur. Il faudrait donc pouvoir passer facilement d’un mode à l’autre. Et bien c’est exactement ce que propose .NET RIA Services. Par défaut les services proposent des CRUD pour chaque entité, et on peut rajouter des opérations taggées Custom. Toutes ces opérations sont réunies dans un service de domaine.

Conclusion

Je n’ai pas encore regardé l’ensemble des possibilités, mais pour l’instant, je retrouve une productivité similaire à une architecture de type client lourd (genre WPF) et ORM (genre Hibernate).

Dans le prochain article, je vous présenterai l’intégration de l’authentification et des autorisations entre Silverlight 3, .NET RIA Services et une application ASP.NET

.NET RIA Services

Ceux qui ont assisté à la formation en soirée sur Silverlight ont eu un avant gout de .NET RIA Services. Ce framework risque de grandement améliorer la productivité des développements d’applications RIA en .NET.

Quelles sont les réponses apportées par ce framework aux problèmes classiques d’applications RIA ?

– Je ne veux pas réécrire des classes de mon domaine (suivant le modèle Value Object)
– Je ne veux pas écrire le code technique de synchronisation des données entre les deux tiers pour de simples manipulations de données (CRUD)
– Je veux pas réécrire des classes Helper
– Je ne veux pas réécrire mes règles de validation décrites par annotations sur les classes de mon domaine
– Je ne veux pas réécrire mes requêtes LINQ
– Je veux pouvoir travailler simplement sur du CRUD ou des services
– Je veux pouvoir me baser sur le mécanisme d’authentification/autorisation défini sur le serveur

Je présenterai plus en détails ce framework dans le wiki ou dans un autre post et vous ferai part de mes premiers essais.

La preview est disponible sur le site de Microsoft. Cette version nécessite Silverlight 3 qui est en beta 1.