Vous êtes sur la page 1sur 44

Partie 6 Cration de solutions professionnelles

Chapitre 29

Cration et utilisation dun service Web


Au terme de ce chapitre, vous saurez :


Crer des services Web SOAP et REST qui exposent des mthodes Web simples. Afficher la description dun service Web SOAP en utilisant Internet Explorer. Concevoir des classes qui peuvent tre passes en paramtre une mthode Web et renvoyes partir dune mthode Web. Crer des proxys pour des services Web SOAP et REST dune application cliente. Appeler une mthode Web REST en utilisant Internet Explorer. Appeler des mthodes Web partir dune application cliente.

Les chapitres prcdents vous ont montr comment construire des applications bureautiques monopostes qui peuvent effectuer une grande varit de tches. Cependant, trs peu de systmes oprent aujourdhui sans tre connects. Une entreprise effectue des oprations commerciales et possde en gnral des applications rseau qui prennent en charge ces activits. De plus, nous sommes maintenant lre dInternet et une entreprise peut composer des solutions qui incorporent diffrents services tiers. Le dfi est darriver combiner ces morceaux ensemble pour leur permettre de communiquer et de cooprer dune manire transparente. Les services Web fournissent une solution ce problme. Grce eux, vous pouvez gnrer des systmes distribus partir des lments qui sont diffuss sur Internet (les bases de donnes, les services mtiers, etc.). Les composants et les services sont hbergs par un serveur Web qui reoit des

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

demandes dune application cliente, les analyse, et envoie la commande correspondante au composant ou service. La rponse est route via le serveur Web vers lapplication cliente. Le but de ce chapitre est de vous montrer comment concevoir, gnrer et tester des services Web qui peuvent tre intgrs dans des applications distribues. Vous allez galement apprendre construire une application cliente qui utilise des mthodes exposes par un service Web.
Note Le but de ce chapitre est de fournir une introduction trs sommaire aux services Web et WCP (Windows Communication Foundation). Si vous souhaitez des informations dtailles sur le fonctionnement de WCF et la manire de gnrer des services scuriss avec WCF, vous devez consulter un ouvrage tel que Microsoft Windows Communication Foundation Step by Step, publi par Microsoft Press, 2007.

Quest-ce quun service Web ?


Un service Web est un composant mtier qui fournit des fonctionnalits utiles, rutilisables aux clients ou aux consommateurs. Un service Web peut tre vu comme un composant avec une relle accessibilit globale (si vous avez les droits daccs appropris, vous pouvez utiliser un service Web nimporte o dans le monde tant que votre ordinateur est connect Internet). Les services Web utilisent un protocole standard, accept, et bien compris, HTTP (Hypertext Transfer Protocol), pour transmettre les donnes et un format de donnes portable qui est bas sur XML. HTTP et XML sont tous les deux des technologies standardises qui peuvent tre utilises par dautres environnements de programmation en dehors du Microsoft .NET Framework. Avec Microsoft Visual Studio 2010, vous pouvez concevoir des services Web avec Microsoft Visual C++, Microsoft Visual C#, ou Microsoft Visual Basic. Cependant, en ce qui concerne lapplication cliente, le langage utilis pour crer le service Web, et mme la manire dont le service Web effectue ses tches, na pas dimportance. Les applications clientes sexcutant dans un environnement totalement diffrent, comme Java, peuvent utiliser les services Web. Linverse est galement vrai : vous pouvez concevoir des services Web en utilisant Java et crire des applications

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

clientes en C#.

Rle de Windows Communication Foundation


Windows Communication Foundation, ou WCF, a t introduit dans la version 3.0 du .NET Framework. Visual Studio fournit un ensemble de modles que vous pouvez utiliser pour concevoir des services Web grce WCF. Cependant, les services Web ne sont quune des technologies que lon peut employer pour crer des applications distribues tournant sur les systmes dexploitation Windows. Il en existe dautres, comme Enterprise Services, .NET Framework Remoting, et Microsoft Message Queue (MSMQ). Si vous gnrez une application distribue pour Windows, quelle technologie devez-vous utiliser, et sera-t-il difficile de changer de technologie plus tard si vous en avez besoin ? Le but de WCF est de fournir un modle de programmation unifi pour la plupart de ces technologies de manire pouvoir gnrer des applications qui soient aussi indpendantes que possible du mcanisme sous-jacent utilis pour se connecter aux services et aux applications (notez que WCF sapplique aussi bien aux services exploits dans des environnements non Web que sur le Web). Il est trs difficile, sinon impossible, de sparer compltement la structure de programmation dune application ou dun service de son infrastructure de communications, mais WCF permet dapprocher cet objectif la plupart du temps. Pour rsumer, si vous envisagez de concevoir des applications et des services distribus pour Windows, vous devez utiliser WCF. Les exercices de ce chapitre vous montreront comment faire.

Architectures de service Web


Il existe deux architectures courantes que les entreprises utilisent pour implmenter des services Web : les services bass sur le modle SOAP (Simple Object Access Protocol), et les services bass sur le modle REST (Representational State Transfer). Les deux architectures reposent sur le protocole HTTP omniprsent (le protocole utilis par le Web pour envoyer et recevoir des pages HTML) et le schma dadressage utilis par Internet, mais elles lutilisent de manires diffrentes. Si vous concevez des solutions qui incor-

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

porent des services Web hbergs par des entreprises tierces, elles peuvent implmenter ces services Web en utilisant chacun de ces modles, si bien que cela vous aidera davoir une bonne comprhension des deux architectures qui sont dcrites brivement dans les sections suivantes.

Services Web SOAP


Un service Web SOAP expose des fonctionnalits en utilisant le modle procdural traditionnel ; la principale diffrence par rapport une application de bureau ordinaire est que les procdures sexcutent distance sur un serveur Web. Une vue dune application cliente dun service Web est une interface qui expose un nombre de mthodes bien dfinies, connues en tant que mthodes Web. Lapplication cliente envoie des demandes ces mthodes Web en utilisant les protocoles Internet standards, en transmettant des paramtres au format XML et en recevant des rponses au format XML. Les mthodes Web SOAP peuvent interroger et modifier des donnes.

Rle de SOAP
SOAP est le protocole utilis par les applications clientes pour envoyer des demandes et recevoir des rponses des services Web. SOAP est un protocole lger construit au sommet de HTTP. SOAP dfinit une grammaire XML pour spcifier les noms des mthodes Web que le client peut appeler sur un service Web, pour dfinir les paramtres et retourner des valeurs, et pour dcrire les types des paramtres et retourner des valeurs. Lorsquun client appelle un service Web, il doit spcifier la mthode et les paramtres en utilisant cette grammaire XML. SOAP est une norme industrielle dont la fonction est damliorer linteroprabilit entre les plateformes. La force de SOAP est sa simplicit et aussi le fait quil soit bas sur dautres technologies normalises, comme HTTP et XML. La spcification SOAP dfinit notamment les lments suivants : Le format dun message SOAP La manire dont les donnes doivent tre encodes

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

La manire dont les messages sont envoys La manire dont les rponses sont traites Les descriptions des dtails exacts du fonctionnement de SOAP et le format interne dun message SOAP dpassent le cadre de cet ouvrage. Il est trs improbable que vous ayez un jour besoin de crer et de mettre en forme des messages SOAP manuellement car beaucoup doutils de dveloppement, y compris Visual Studio 2010, automatisent ce traitement, en prsentant une API simple aux dveloppeurs construisant des services Web et des applications clientes.

Langage de description des services Web


Le corps dun message SOAP est un document XML. Lorsquune application cliente appelle une mthode Web, le serveur Web attend que le client utilise un ensemble de balises particulier pour encoder les paramtres de la mthode. Comment un client connat-il les balises ou le schma XML quil doit utiliser ? La rponse est quun service Web, quand il est sollicit, est cens fournir sa propre description. La rponse du service Web est un autre document XML qui dcrit le service Web. Assez naturellement, ce document sappelle la description du service Web. Le schma XML utilis pour ce document a t standardis et se nomme WSDL (Web Services Description Language, ou langage de description de services Web). Cette description fournit assez dinformations pour quune application cliente puisse construire une demande SOAP dans un format susceptible dtre compris par le serveur Web. Encore une fois, les dtails de WSDL dpassent le cadre de ce livre, mais Visual Studio 2010 contient des outils qui analysent le WSDL dun service Web dune manire automatique. Visual Studio 2010 utilise alors les informations pour dfinir une classe proxy quune application cliente peut utiliser pour convertir des appels ordinaires de mthode sur cette classe proxy en demandes SOAP que le proxy envoie sur le Web. Cest cette approche que vous allez utiliser dans les exercices de ce chapitre.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

Exigences non fonctionnelles des services Web


Les efforts initiaux pour dfinir les services Web et leurs standards associs se concentraient sur les aspects fonctionnels pour envoyer et recevoir des messages SOAP. Peu aprs que les services Web sont devenus une technologie courante pour intgrer des services distribus, il est apparu vident quil y avait des problmes que SOAP et HTTP ne pouvaient pas traiter seuls. Ces problmes concernent de nombreuses exigences non fonctionnelles qui sont importantes dans tout environnement distribu, mais bien plus encore lorsquon utilise Internet comme base dune solution distribue. On peut notamment citer les lments suivants : Scurit Comment sassurer que les messages SOAP qui circulent entre un service Web et un client nont pas t intercepts et modifis en chemin sur Internet ? Comment tre sr quun message SOAP a t envoy rellement par le client ou par le service Web qui prtend lavoir envoy, et non pas par un faux site qui tente dobtenir des informations frauduleusement ? Comment peut-on restreindre laccs un service Web des utilisateurs spcifiques ? Il y a des problmes dintgrit de message, de confidentialit, et dauthentification et ce sont des questions fondamentales si lon construit des applications distribues grce Internet. Au dbut des annes 1990, un certain nombre dditeurs fournissant des outils pour gnrer des systmes distribus ont form une organisation qui a pris plus tard le nom dOASIS (Organization for the Advancement of Structured Information Standards). Quand les dfauts de linfrastructure des premiers services Web sont devenus apparents, les membres dOASIS ont dfini la spcification WS-Security. Cette spcification dcrit la manire de protger les messages envoys par les services Web. Les diteurs qui souscrivent WS-Security fournissent leurs propres implmentations respectant cette spcification, en utilisant gnralement des technologies comme le chiffrement et les certificats. Stratgie Bien que la spcification WS-Security dfinisse la manire damliorer la scurit, les dveloppeurs ont toujours besoin dcrire du code pour limplmenter. Les dveloppeurs qui crent des services Web nimplmentent pas toujours trs strictement le mcanisme de

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

scurit. Par exemple, un service Web peut utiliser uniquement une forme relativement simple de chiffrement qui peut ainsi tre facilement cass. Un client envoyant des informations hautement confidentielles ce service Web insistera probablement sur un niveau lev de scurit. Ceci est un exemple de stratgie, mais on peut citer aussi la qualit de service et la fiabilit du service Web. Lapplication cliente et le service Web peuvent ngocier le niveau de service quils souhaitent utiliser en fonction des exigences et du cot. Cependant, cette ngociation exige que le client et le service Web aient une comprhension commune des stratgies disponibles. La spcification WSPolicy fournit un modle gnrique et une syntaxe correspondante pour dcrire et communiquer les stratgies quun service Web implmente. Routage et adressage Il est utile pour un serveur Web dtre capable de rediriger une demande de service Web vers une machine dun groupe dordinateurs hbergeant des instances du service. Par exemple, de nombreux systmes volutifs utilisent lquilibrage de charge, o les demandes envoyes un serveur Web sont en fait rediriges par ce serveur vers dautres ordinateurs pour rpartir la charge sur ces ordinateurs. Le serveur peut utiliser nimporte quel algorithme pour essayer de rpartir la charge. Le point important est que cette redirection est transparente pour le client effectuant la demande de service Web, et le serveur qui gre par la suite la demande doit savoir o envoyer les rponses quil gnre. Rediriger les demandes de service Web est galement utile si un administrateur a besoin darrter un ordinateur pour effectuer de la maintenance. Les demandes qui ont t envoyes cet ordinateur peuvent ainsi tre rediriges vers une des machines du groupe. La spcification WSAddressing dcrit un systme capable de rediriger les demandes de service Web.

Note Les dveloppeurs parlent de spcifications WS-* pour faire rfrence aux spcifications WS-Security, WS-Policy et WS-Addressing.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

Services Web REST


la diffrence des services Web SOAP, le modle REST de services Web utilise un schma navigationnel pour reprsenter les objets et les ressources mtiers sur un rseau. Par exemple, une entreprise peut fournir laccs aux informations des employs, en exposant les dtails de chaque employ sous la forme dune seule ressource, en utilisant un schma similaire celuici :
http://northwind.com/employees/7

Laccs cette URL fait rechercher par le service Web les donnes de lemploy n 7. Ces donnes peuvent tre retournes dans de nombreux formats, mais pour des raisons de portabilit, les formats les plus courants sont XML (parfois appel Plain Old XML ou POX) et JavaScript Object Notation (ou JSON). Si lentreprise Northwind Traders choisit dutiliser POX, le rsultat retourn en interrogeant lURL ci-dessus sera le suivant :
<Employee> <EmployeeID> 7 </EmployeeID> <LastName> King </LastName> <FirstName> Robert </FirstName> <Title> Sales Representative </Title> </Employee>

Pour concevoir une solution base sur REST, vous devez bien comprendre comment il divise un modle mtier en un ensemble de ressources. Dans certains cas, tels que les employs, cela peut tre simple, mais dans dautres situations cela est un vritable dfi. Le modle REST repose sur lapplication qui accde aux donnes en envoyant le verbe HTTP appropri dans la demande utilise pour accder aux donnes. Par exemple, la demande simple illustre prcdemment doit envoyer une demande HTTP GET au service Web. HTTP prend en charge bien dautres verbes, tels que POST, PUT, et DELETE, que vous pouDunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

vez utiliser respectivement pour crer, modifier, et supprimer des ressources. En utilisant le modle REST, vous pouvez exploiter ces verbes et concevoir des services Web qui peuvent mettre jour les donnes. la diffrence de SOAP, les messages envoys et reus en utilisant le modle REST tendent tre bien plus compacts. Ceci sexplique principalement par le fait que REST ne fournit pas les mmes facilits de routage, stratgie et de scurit que les spcifications WS-*, et vous devez vous reposer sur linfrastructure sous-jacente fournie par le serveur Web pour protger les services Web REST. Cependant, cette approche minimaliste signifie quun service Web REST est habituellement bien plus efficace que le service Web SOAP quivalent lorsquil transmet et reoit des messages.

Conception de services Web


En utilisant WCF, vous pouvez concevoir des services Web qui suivent les modles REST ou SOAP. Cependant, le mcanisme SOAP est le plus simple des deux schmas implmenter avec WCF, et nous allons par consquent nous concentrer sur ce modle pour les premiers exercices de ce chapitre. Ensuite, nous verrons comment concevoir un service Web REST. Dans ce chapitre, vous allez crer deux services Web : Le service Web InformationsProduit. Cest un service Web SOAP qui permet lutilisateur de calculer le cot dachat dune quantit spcifie dun produit particulier de la base de donnes Northwind Le service Web DetailsProduit. Cest un service Web REST qui permet lutilisateur de rcuprer les dtails des produits de la base de donnes Northwind.

Cration du service Web SOAP InformationsProduit


Dans le premier exercice, vous allez crer le service Web InformationsProduit et examiner le code gnr par Visual Studio 2010 chaque fois que vous crez un nouveau projet de service WCF. Dans les exercices suivants, vous allez dfinir et implmenter la mthode Web CombienCaCoutera

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

puis tester la mthode Web pour sassurer quelle fonctionne comme prvu.
Important Vous ne pouvez pas concevoir des services Web en utilisant Microsoft Visual C# 2010 Express. la place, vous devez utiliser Microsoft Visual Web Developer 2010 Express. Vous pouvez tlcharger Visual Web Developer 2010 Express gratuitement partir du site Web de Microsoft.

Cration du service Web SOAP, et examen du code dexemple


1. Dmarrez Visual Studio 2010 sil nest pas dj ouvert, ou dmarrez Visual Web Developer 2010 Express. 2. Si vous utilisez Visual Studio 2010, dans le menu Fichier, pointez Nouveau, puis cliquez sur Site Web. 3. Si vous utilisez Visual Web Developer 2010 Express, dans le menu Fichier, cliquez sur Nouveau site Web. Assurez-vous que vous slectionnez Visual C# sous Modles installs dans le volet gauche. 4. Dans la bote de dialogue Nouveau site Web, cliquez sur le modle Service WCF. Slectionnez Systme de fichiers dans la zone de liste droulante Emplacement, spcifiez le dossier \Visual C Sharp Etape par tape\Chapitre 29\ServiceInformationsProduit de votre dossier Documents, puis cliquez sur OK. Visual Studio 2010 gnre un site Web hberg en utilisant le serveur Web de dveloppement fourni par Visual Studio et Visual Web Developer. Vous pouvez aussi hberger les services Web en utilisant Microsoft Internet Information Services (IIS). Le site Web contient des dossiers appels App_Code et App_Data, un fichier appel Service.svc, et un fichier de configuration appel Web.config. Le code dun service Web dexemple est dfini dans la classe Service, stock dans le fichier Service.cs du dossier App_Code, et affich dans la fentre Code. La classe Service implmente une interface dexemple appele IService, qui est stocke dans le fichier IService.cs du dossier App_Code.
Note Le fichier de solution dun projet de site Web est situ dans le dossier Visual Studio 2010\Projects de votre dossier Documents plutt que

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

dans le dossier qui contient les fichiers du site Web. Vous pouvez ouvrir un projet de site Web existant soit en trouvant et en ouvrant le fichier de solution appropri, soit en utilisant la commande Ouvrir Site Web du menu Fichier puis en spcifiant le dossier qui contient les fichiers du site Web. Vous pouvez galement copier le fichier de solution dun site Web vers le dossier contenant les fichiers du site Web, mais ce nest pas recommand dans un environnement de production, pour des raisons de scurit.

5. Cliquez sur le projet C:\...\ServiceInformationsProduit\. Dans la fentre Proprits, initialisez la proprit Utiliser des ports dynamiques False et la proprit Numro de port 4500.
Note Il est possible que vous deviez attendre quelques secondes aprs avoir initialis la proprit Utiliser des ports dynamiques False avant de pouvoir initialiser la proprit Numro de port.

Un port spcifie un emplacement o le serveur Web coute les demandes entrantes des applications clientes. Par dfaut, le serveur Web de dveloppement fourni avec Visual Studio 2010 choisit un port alatoirement pour rduire les chances de collision avec dautres ports utiliss par dautres services rseau sexcutant sur votre ordinateur. Cette fonctionnalit est utile si vous gnrez et testez des sites Web ASP.NET dans un environnement de dveloppement avant de les copier vers un serveur de production comme IIS. Cependant, lorsque vous gnrez un service Web, il est plus utile dutiliser un numro de port fixe car les applications clientes ont besoin de pouvoir se connecter celui-ci.
Note Lorsque vous fermez un site Web puis louvrez nouveau en utilisant Visual Studio ou Visual Web Developer, la proprit Utiliser des ports dynamiques repasse frquemment True et la proprit Numro de port est initialise un port alatoire. Dans ce cas, rinitialisez ces proprits aux valeurs dcrites dans cette tape.

6. Dans lExplorateur de solutions, dveloppez le dossier App_Code sil nest pas dj ouvert, faites un clic droit sur le fichier Service.cs, puis Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web cliquez sur Renommer. Modifiez le nom du fichier en InformationsProduit.cs. 7. En utilisant la mme technique, modifiez le nom du fichier IService.cs en IInformationsProduit.cs. 8. Faites un double clic sur le fichier IInformationsProduit.cs pour lafficher dans la fentre Code. Ce fichier contient la dfinition dune interface appele IService. En haut de ce fichier IInformationsProduit.cs, vous trouverez des instructions using faisant rfrence aux espaces de noms System, System.Collections.Generic, et System.Text (que vous avez rencontrs auparavant), suivies par deux instructions supplmentaires faisant rfrence aux espaces de noms System.ServiceModel et System.Runtime.Serialization. Lespace de noms System.ServiceModel contient les classes utilises par WCF pour dfinir des services et leurs oprations. WCF utilise les classes de lespace de noms System.Runtime.Serialization pour convertir les objets en un flux de donnes pour la transmission sur le rseau (traitement appel srialisation) et pour annuler cette conversion (dsrialisation). Vous en apprendrez davantage sur la faon dont WCF srialise et dsrialise les objets plus tard dans ce chapitre. Le contenu principal du fichier IInformationsProduit se compose dune interface appele IService et dune classe appele CompositeType. Linterface IService est prfixe avec lattribut ServiceContract, et la classe CompositeType est balise avec lattribut DataContract. En raison de la structure dun service WCF, vous pouvez adopter une approche contract-first (priorit au contrat) pour le dveloppement. Lorsque vous effectuez du dveloppement contract-first , vous dfinissez les interfaces, ou contracts, que le service implmentera, puis vous gnrez un service conforme ces contracts. Ce nest pas une nouvelle technique, et vous avez vu des exemples de cette stratgie tout au long de cet ouvrage. Le point important derrire lutilisation du dveloppement contract-first est que vous pouvez vous concentrer sur la conception de votre service. Si ncessaire, il peut rapidement tre revu pour assurer que votre conception nintroduit pas des dpendances du matriel ou des logiciels spcifiques avant deffectuer trop de dveloppement ; rappelez-vous que dans de Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

nombreux cas les applications clientes pourraient ne pas tre gnres avec WCF et pourraient mme ne pas sexcuter sous Windows. Lattribut ServiceContract marque une interface comme dfinissant les mthodes que la classe qui implmente le service Web exposera en tant que mthodes Web. Les mthodes elles-mmes sont balises avec lattribut OperationContract. Les outils fournis avec Visual Studio 2010 utilisent ces attributs pour aider gnrer le document WSDL appropri pour le service. Toutes les mthodes de linterface non marques avec lattribut OperationContract ne seront pas incluses dans le document WSDL et par consquent ne seront pas accessibles aux applications clientes utilisant le service Web. Si une mthode Web prend des paramtres ou retourne une valeur, les donnes de ces paramtres et de cette valeur doivent tre converties en un format qui peut tre transmis sur le rseau puis reconverti nouveau en objets (cest le traitement appel srialisation et dsrialisation mentionn prcdemment). Les diffrents standards de services Web dfinissent des mcanismes pour spcifier le format de types de donnes simples, comme les nombres et les chanes, dans la description WSDL dun service Web. Cependant, vous pouvez aussi dfinir vos propres types de donnes complexes bass sur des classes et des structures. Si vous utilisez ces types dans un service Web, vous devez fournir des informations sur la faon de les srialiser et dsrialiser. Si vous regardez la dfinition de la mthode GetDataUsingDataContract de linterface IService, vous pouvez voir quelle attend un paramtre du type CompositeType. La classe CompositeType est marque avec lattribut DataContract, qui spcifie que la classe doit dfinir un type qui peut tre srialis et dsrialis en tant que flux XML dune demande SOAP ou dun message de rponse. Chaque membre que vous souhaitez inclure dans le flux srialis envoy sur le rseau doit tre marqu avec lattribut DataMember. 9. Faites un double clic sur le fichier InformationsProduit.cs pour lafficher dans la fentre Code. Ce fichier contient une classe appele Service qui implmente linterface IService et fournit les mthodes GetData et GetDataUsingDataContract dfinies par cette interface. Cette classe est le service Web. Lorsquune application cliente appelle une mthode Web de Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

ce service Web, elle gnre un message de demande SOAP et lenvoie au serveur Web hbergeant le service Web. Le serveur Web cr une instance de cette classe et excute la mthode correspondante. Lorsque la mthode se termine, le serveur Web construit un message de rponse SOAP, quelle renvoie lapplication cliente. 10. Faites un double clic sur le fichier Service.svc pour lafficher dans la fentre Code. Cest le fichier de service du service Web ; il est utilis par lenvironnement hte (IIS, dans ce cas) pour dterminer quelle classe charger lorsquil reoit une demande de lapplication cliente. La proprit Service de la directive @ ServiceHost spcifie le nom de la classe du service Web, et la proprit CodeBehind spcifie lemplacement du code source de cette classe.
Astuce Si vous ne souhaitez pas dployer le code source de votre service WCF vers le serveur Web, vous pouvez fournir la place un assembly compil. Vous pouvez ensuite spcifier le nom et lemplacement de cet assembly en utilisant la directive @ Assembly. Pour plus dinformations, cherchez directive @ Assembly dans la documentation fournie avec Visual Studio 2010.

Maintenant que vous avez vu la structure dun service WCF, vous pouvez dfinir linterface qui spcifie le contrat de service du service Web InformationsProduit puis crer une classe qui implmente ce contrat de service.

Dfinition du contrat du service Web InformationsProduit


1. Affichez le fichier IInformationsProduit.cs dans la fentre Code. 2. Dans la ligne de code qui dfinit linterface IService, faites un double clic sur le nom IService pour le surligner. Dans le menu Refactoriser, cliquez sur Renommer. Dans la bote de dialogue Renommer, saisissez IInformationsProduit dans la zone de texte Nouveau nom, dcochez la case Afficher un aperu des modifications de la rfrence, puis cliquez sur OK. Cette action modifie le nom de linterface de IService en IInformationsProduit et modifie galement toutes les rfrences IService en Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

IInformationsProduit dans tous les fichiers du projet. La ligne qui dfinit linterface dans la fentre Code doit ressembler ceci :
public interface IInformationsProduit { ... }

3. Dans linterface IInformationsProduit, supprimez les dfinitions des mthodes GetData et GetDataUsingDataContract et remplacez-les par la mthode CombienCaCoutera illustre en gras. Assurez-vous de conserver lattribut OperationContract de la mthode Web.
[ServiceContract] public interface IInformationsProduit { [OperationContract] decimal CombienCaCoutera(int idProduit, int combien); }

La mthode CombienCaCoutera prend un ID produit et une quantit puis retourne une valeur decimal spcifiant ce que cette quantit cotera. 4. Supprimez la classe CompositeType, en incluant lattribut DataContract, du fichier IInformationsProduit.cs. Le fichier doit contenir uniquement la dfinition de linterface IInformationsProduit. La prochaine tape consiste dfinir la classe InformationsProduit, qui implmente linterface IInformationsProduit. La mthode CombienCaCoutera de cette classe rcuprera le prix du produit partir de la base de donnes en effectuant une requte ADO.NET simple.
Note Les services Web que vous concevez dans ce chapitre accdent la base de donnes Northwind. Si vous ne lavez pas dj fait, vous pouvez crer cette base de donnes en suivant les tapes de la section Cration de la base de donnes du chapitre 25, Recherche d'informations dans une base de donnes .

Implmentation de linterface IInformationsProduit


1. Affichez le code du fichier InformationsProduit.cs dans la fentre

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

Code. 2. Ajoutez les instructions using suivantes la liste en haut du fichier :


using System.Data; using System.Data.SqlClient;

Vous devez vous souvenir (voir le chapitre 25) que ces espaces de noms contiennent les types ncessaires pour accder une base de donnes Microsoft SQL Server et interroger des donnes. 3. Dans la ligne de code qui dfinit la classe Service, faites un double clic sur le nom Service pour le surligner. Dans le menu Refactoriser, cliquez sur Renommer. Dans la bote de dialogue Renommer, saisissez InformationsProduit dans la zone de texte Nouveau nom puis cliquez sur OK. Comme dans lexercice prcdent, cette action modifie le nom de la classe Service InformationsProduit et modifie galement toutes les rfrences de cette classe en InformationsProduit dans tous les fichiers du projet. La ligne qui dfinit la classe dans la fentre Code doit ressembler ceci :
public class InformationsProduit : IInformationsProduit { ... }

4. Supprimez les mthodes GetData et GetDataUsingDataContract de la classe InformationsProduit. 5. Ajoutez la mthode CombienCaCoutera la classe InformationsProduit, illustre ici en gras :
public class InformationsProduit : IInformationsProduit { public decimal CombienCaCoutera(int idProduit, int combien) { SqlConnection connexionDonnees = new SqlConnection(); decimal coutTotal = 0; try {

SqlConnectionStringBuilder generateur = new SqlConnectionStringBuilder(); generateur.DataSource = ".\\SQLExpress"; generateur.InitialCatalog = "Northwind";

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

generateur.IntegratedSecurity = true; connexionDonnees.ConnectionString = generateur.ConnectionString; connexionDonnees.Open(); SqlCommand commandeDonnees = new SqlCommand(); commandeDonnees.Connection = connexionDonnees; commandeDonnees.CommandType = CommandType.Text; commandeDonnees.CommandText = "SELECT UnitPrice FROM WHERE ProductID = @ProductID";

Products

SqlParameter parametreIDProduit = new SqlParameter("@ProductID", SqlDbType.Int); parametreIDProduit.Value = idProduit; commandeDonnees.Parameters.Add(parametreIDProduit); decimal? prix = commandeDonnees.ExecuteScalar() as decimal?; if (prix.HasValue) { coutTotal = prix.Value * combien; }

} finally { connexionDonnees.Close(); } } return coutTotal;

Cette mthode se connecte la base de donnes et excute une requte ADO.NET pour rcuprer le cot du produit correspondant lID produit fourni la base de donnes Northwind. Si le cot retourn nest pas null, la mthode calcule le cot total de la requte et le retourne ; sinon, la mthode retourne la valeur 0. Le code est similaire celui illustr au chapitre 25, except quil utilise la mthode ExecuteScalar pour lire la valeur de la colonne UnitPrice (prix unitaire) de la base de donnes. La mthode ExecuteScalar fournit un mcanisme trs efficace pour excuter des requtes qui retournent une seule valeur scalaire (et bien plus efficace que douvrir un curseur et de lire les donnes du curseur). La valeur retourne par ExecuteScalar est un object, si bien que vous devez le caster avec le type appropri avant de lutiliser.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

Important Cette mthode neffectue aucune validation des paramtres dentre. Par exemple, vous pouvez spcifier une valeur ngative pour le paramtre combien. Dans un service Web de production, vous intercepterez ce genre derreurs, les enregistrerez et retournerez une exception. Cependant, la transmission dune exception une application cliente a des implications sur la scurit dun service WCF. Ces dtails dpassent le cadre de ce livre. Pour plus dinformations, voir Microsoft Windows Communication Foundation Step by Step.

Avant de pouvoir utiliser le service Web, vous devez mettre jour la configuration du fichier Service.svc pour faire rfrence la classe InformationsProduit du fichier InformationsProduit.cs. Le serveur Web utilise les informations du fichier Web.config cr avec le projet pour contenir des informations sur la faon de publier le service et de le rendre disponible aux applications clientes. Vous devez modifier le fichier Web.config et ajouter les dtails du service Web. Configuration du service Web 1. Dans lExplorateur de solutions, faites un double clic sur le fichier Service.svc pour lafficher dans la fentre Code. Mettez jour les attributs Service et CodeBehind de la directive ServiceHost, comme indiqu en gras ici :
<%@ ServiceHost Language="C#" Debug="true" Service="InformationsProduit" CodeBehind="~/App_Code/InformationsProduit.cs" %>

2. Dans lExplorateur de solutions, faites un double clic sur le fichier Web.config. Dans la fentre Code, recherchez llment <system.serviceModel>. On utilise cet lment pour spcifier la configuration dun service WCF. Cet lment contient actuellement un lment <behaviors>, que vous pouvez ignorer pour le moment. 3. Dans le fichier Web.config, ajoutez llment <services> et les lments enfants illustrs en gras llment <system.serviceModel>, avant llment <behaviors> :
<system.serviceModel> <services> <service name="InformationsProduit"> <endpoint address="" binding="wsHttpBinding" contract="IInformationsProduit"/>

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

</service> </services> <behaviors> ... </behaviors> </system.serviceModel>

Cette configuration spcifie le nom de la classe qui implmente le service Web (InformationsProduit). WCF utilise la notion de points de terminaisons pour associer une adresse rseau avec un service Web spcifique. Si vous hbergez un service Web en utilisant IIS ou le serveur Web de dveloppement, vous devez laisser la proprit address de votre point de terminaison vide car ces serveurs coutent les demandes entrantes sur une adresse spcifie par leurs propres informations de configuration. Vous pouvez gnrer vos propres applications htes personnalises si vous ne voulez pas utiliser IIS ou le serveur de dveloppement. Dans ce genre de situations, vous devez spcifier une adresse pour le service dans la dfinition du point de terminaison. Le paramtre binding indique le protocole rseau que le serveur utilise pour recevoir des demandes et transmettre des rponses. Pour plus dinformations sur les points de terminaison, les htes personnaliss, et les liaisons, reportez-vous Microsoft Windows Communication Foundation Step by Step, publi par Microsoft Press. 4. Dans le menu Fichier, cliquez sur Enregistrer tout. 5. Dans lExplorateur de solutions, faites un clic droit sur Service.svc, puis cliquez sur Afficher dans le navigateur. Internet Explorer dmarre et affiche la page suivante, ce qui confirme que vous avez cr et dploy avec succs le service Web et fourni des informations utiles dcrivant la manire de crer une application cliente simple pouvant accder au service Web.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

Note Si vous cliquez sur le lien indiqu sur la page Web (http://localhost:4500/ServiceInformationsProduit/Service.svc?wsdl), Internet Explorer affiche une page contenant la description WSDL du service Web. Il sagit dun code XML long et complexe, mais Visual Studio 2010 peut prendre les informations de cette description et les utiliser pour gnrer une classe quune application cliente peut employer pour communiquer avec le service Web.

6. Fermez Internet Explorer, et retournez dans Visual Studio 2010.

Services Web, clients et proxys


Vous avez vu quun service Web utilise SOAP pour fournir un mcanisme pour recevoir des demandes et renvoyer les rsultats. SOAP utilise XML pour mettre en forme les donnes transmises qui se situent au-dessus du protocole HTTP utilis par les serveurs Web et les navigateurs. Cest ce qui rend les services Web si puissants. Nimporte quelle application cliente qui parle SOAP peut communiquer avec un service Web. Dans ces conditions, comment un client peut-il parler SOAP ? Il y a deux faons de procder : une difficile et une facile.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

SOAP : la voie difficile


Lapplication cliente effectue un certain nombre dtapes : 1. Dterminer lURL du service Web excutant la mthode Web. 2. Effectuer une demande WSDL (Web Services Description Language) en utilisant lURL pour obtenir une description des mthodes Web disponibles, les paramtres utiliss, et les valeurs retournes. Vous avez vu comment effectuer ceci en utilisant Internet Explorer dans lexercice prcdent. 3. Analyser le document WSDL, convertir chaque opration en une demande Web, et srialiser chaque paramtre dans le format dcrit par le document WSDL. 4. Soumettre la demande, ainsi que les donnes srialises, lURL en utilisant HTTP. 5. Attendre que le service Web rponde. 6. En utilisant les formats spcifis par le document WSDL, dsrialiser les donnes retournes par le service Web en des valeurs significatives que votre application peut ensuite traiter. Cela constitue beaucoup de travail pour appeler une seule mthode, et cela peut engendrer des erreurs.

SOAP : la voie facile


La mauvaise nouvelle est que la manire facile dutiliser SOAP nest pas bien diffrente de la voie difficile. La bonne nouvelle est que le traitement peut tre automatis car il est largement mcanique. Comme mentionn prcdemment, de nombreux diteurs, y compris Microsoft, fournissent des outils qui peuvent gnrer une classe proxy base sur une description WSDL. Le proxy masque la complexit de lemploi de SOAP et expose une interface de programmation simple base sur les mthodes publies par le service Web. Lapplication cliente appelle les mthodes Web en appelant les mthodes avec le mme nom dans le proxy. Le proxy convertit ces appels de mthodes locales en demandes SOAP et les envoie au service Web. Le proxy attend la rponse, dsrialise les donnes, puis les retrans-

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

met au client comme un retour de nimporte quel appel de mthode simple. Cest lapproche que vous allez adopter dans les exercices de cette section.

Consommation du service Web SOAP InformationsProduit


Vous avez cr un appel de service Web SOAP qui montre une mthode Web appele CombienCaCoutera pour dterminer le cot dachat de n lments de produit x de la base de donnes Northwind Traders. Dans les exercices suivants, vous allez utiliser ce service Web et crer une application qui se sert de cette mthode.

Ouverture dune application cliente de service Web


1. Dmarrez une autre instance de Visual Studio 2010. Cest important. Le Serveur de dveloppement ASP.NET sarrte si vous fermez le projet du service Web ServiceInformationsProduit, ce qui signifie que vous ne pourrez pas y accder partir du client (si vous excutez Visual Studio 2010 et non pas Visual Web Developer 2010 Express Edition, vous pouvez aussi crer lapplication cliente comme un projet dans la mme solution que le service Web). Lorsque vous hbergez un service Web dans un environnement de production en utilisant IIS, ce problme ne se produit pas car IIS sexcute indpendamment de Visual Studio 2010.
Important Si vous avez utilis Visual Web Developer 2010 Express dition pour les exercices de cette partie de louvrage, dmarrez Visual C# 2010 Express dition plutt quune seconde instance de Visual Web Developer 2010 Express dition (laissez Visual Web Developer 2010 Express dition ouvert).

2. Dans la seconde instance de Microsoft Visual Studio 2010, ouvrez la solution ClientProduit du dossier \Visual C Sharp Etape par tape\Chapitre 29\ClientProduit de votre dossier Documents. 3. Dans lExplorateur de solutions, faites un double clic sur le fichier Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

ClientProduit.xaml pour afficher le formulaire dans la fentre Concepteur. Le formulaire ressemble ceci :

Le formulaire permet lutilisateur de spcifier un ID produit et de rcuprer les dtails du produit de la base de donnes Northwind. Lutilisateur peut aussi fournir une quantit et rcuprer un prix dachat pour cette quantit du produit. Actuellement, les boutons du formulaire ne font rien. Dans les tapes suivantes, vous allez ajouter le code ncessaire pour appeler les mthodes du service Web InformationsProduit afin dobtenir les donnes et les afficher.

Ajout du code pour appeler le service Web de lapplication cliente


1. Dans le menu Projet, cliquez sur Ajouter une rfrence de service. La bote de dialogue Ajouter une rfrence de service souvre. Dans cette bote de dialogue, vous pouvez parcourir les services Web et examiner les mthodes Web quils fournissent. 2. Dans la zone de texte Adresse, saisissez http://localhost:4500/ServiceInformationsProduit/Service.svc, puis cliquez sur Aller . Le service InformationsProduit apparat dans la zone Services. 3. Dveloppez le service InformationsProduit, puis cliquez sur linterface IInformationsProduit qui apparat. Dans la zone de liste Oprations, vrifiez que les deux oprations, ObtenirInfoProduit et CombienCaCoutera, apparaissent, comme lillustre limage suivante.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

4. Modifiez la valeur dans la zone de texte Espace de noms ServiceInformationsProduit puis cliquez sur OK. Un nouveau dossier appel Service References apparat dans lExplorateur de solutions. Ce dossier contient un lment appel ServiceInformationsProduit. 5. Cliquez sur le bouton Afficher tous les fichiers dans la barre doutils Explorateur de solutions. Dveloppez le dossier ServiceInformationsProduit, puis dveloppez le dossier Reference.svcmap. Faites un double clic sur le fichier Reference.cs et examinez son contenu dans la fentre Code. Ce fichier contient plusieurs classes et interfaces, notamment une classe nomme InformationsProduitClient dans un espace de noms appel ClientProduit.ServiceInformationsProduit. La classe InformationsProduitClient est la classe proxy gnre par Visual Studio 2010 partir de la description WSDL du service Web InformationsProduit. Elle contient un certain nombre de constructeurs, mais aussi une mthode appele CombienCaCoutera. Le code suivant montre quelques lments importants de ce fichier qui a t remis en forme pour le rendre un peu plus lisible :
namespace ClientProduit.ServiceInformationsProduit { ... [System.ServiceModel.ServiceContractAttribute(...)] public interface IInformationsProduit {

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

} ... ... public partial class InformationsProduitClient : System.ServiceModel.ClientBase<ClientProduit.ServiceInformationsProduit.IInf ormationsProduit>, ClientProduit.ServiceInformationsProduit.IInformationsProduit { public InformationsProduitClient() { } public InformationsProduitClient(string endpointConfigurationName) : base(endpointConfigurationName) { } public InformationsProduitClient(string endpointConfigurationName, string remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public InformationsProduitClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public InformationsProduitClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : base(binding, remoteAddress) { } public decimal CombienCaCoutera(int idProduit, int combien) { return base.Channel.CombienCaCoutera(idProduit, combien); }

[System.ServiceModel.OperationContractAttribute(...)] decimal CombienCaCoutera(int idProduit, int combien);

Linterface InformationsProduit est similaire linterface que vous avez dfinie dans le service Web, except que certains attributs spcifient des paramtres supplmentaires (le but de ces paramtres dpasse le cadre de ce chapitre). La classe InformationsProduit implmente cette interface, mais hrite aussi de la classe gnrique ClientBase. La classe ClientBase de lespace de noms System.ServiceModel fournit les fonctionnalits de communication de base dont une application cliente a besoin pour communiquer avec un service Web. Le para-

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

mtre de type spcifie linterface que la classe implmente. La classe ClientBase fournit la proprit Channel, qui encapsule une connexion HTTP un service Web. Les diffrents constructeurs de la classe InformationsProduitClient configurent le canal pour la connecter au point de terminaison que le service Web coute. Lapplication cliente peut instancier la classe InformationsProduitClient, en spcifiant le point de terminaison connecter, puis appeler la mthode CombienCaCoutera. Lorsque cela arrive, le canal de la classe sous-jacente ClientBase empaqute les informations fournies comme paramtres dans un message SOAP quil transmet au service Web. Lorsque le service Web rpond, les informations retournes sont dsempaquetes partir de la rponse SOAP et retransmises lapplication cliente. De cette faon, lapplication cliente peut appeler une mthode dun service Web exactement de la mme faon quelle appellerait une mthode locale.
Note Vous avez peut-tre remarqu que linterface est marque avec ServiceContractAttribute plutt que simplement ServiceContract, et lopration est marque avec OperationContractAttribute plutt que OperationContract. En fait, tous les attributs ont le suffixe Attribute avec leur nom. Le compilateur C# reconnat cette convention de noms, et par consquent il vous autorise omettre le suffixe Attribute dans votre propre code.

6. Affichez le formulaire ClientProduit.xaml dans la fentre Concepteur. Faites un double clic sur le bouton Calculer le cot pour gnrer la mthode de gestionnaire dvnement calculerCout_Click de ce bouton. 7. Dans la fentre Code, ajoutez les instructions using suivantes la liste en haut du fichier ClientProduit.xaml.cs :
using ClientProduit.ServiceInformationsProduit; using System.ServiceModel;

8. Dans la mthode calculerCout_Click, ajoutez le code suivant en gras :


private void calculerCout_Click(object sender, RoutedEventArgs e) {

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

InformationsProduitClient proxy = new InformationsProduitClient();

Cette instruction cre une instance de la classe InformationsProduitClient que votre code utilisera pour appeler la mthode Web CombienCaCoutera. 9. Ajoutez le code en gras la mthode calculerCout_Click. Ce code extrait lID produit et le nombre requis de la zone de texte Combien du formulaire, excute la mthode Web CombienCaCoutera en utilisant lobjet proxy, puis affiche le rsultat dans le label coutTotal.
private void calculerCout_Click(object sender, RoutedEventArgs e) { InformationsProduitClient proxy = new InformationsProduitClient(); try { int idProd = Int32.Parse(idProduit.Text); int nombreRequis = Int32.Parse(combien.Text); decimal cout = proxy.CombienCaCoutera(idProd, nombreRequis); coutTotal.Content = String.Format("{0:C}", cout); } catch (Exception ex) { MessageBox.Show("Erreur en calculant le cot: " + ex.Message, "Erreur", MessageBoxButton.OK, MessageBoxImage.Error); } finally { if (proxy.State == CommunicationState.Faulted) proxy.Abort(); else proxy.Close(); } }

Vous savez probablement combien les rseaux sont imprvisibles, et ceci est valable deux fois plus pour Internet. Le bloc try/catch assure que lapplication cliente intercepte toutes les exceptions rseau qui peuvent survenir. Il est galement possible que lutilisateur puisse ne pas saisir un entier valide dans la zone de texte ID Produit du formulaire. Le bloc try/catch gre aussi cette exception. Le bloc finally examine ltat de lobjet proxy. Si une exception est apparue dans le service Web (qui peut tre provoque par lutilisateur fournissant un ID produit inexistant, par exemple), le proxy

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

sera ltat Faulted. Dans ce cas, le bloc finally appelle la mthode Abort du proxy pour reconnatre lexception et fermer la connexion ; dans le cas contraire, il appelle la mthode Close. Les mthodes Abort et Close ferment toutes les deux les canaux de communication avec le service Web et librent les ressources associes cette instance de lobjet InformationsClientProduit.

Test de lapplication
1. Dans le menu Dboguer, cliquez sur Dmarrer sans dbogage. 2. Lorsque le formulaire Dtails du produit apparat, saisissez 3 dans la zone de texte ID Produit, saisissez 5 dans la zone de texte Combien, puis cliquez sur Calculer le cot. Aprs un court dlai pendant que le client instancie le proxy et gnre une demande SOAP contenant lID produit, le proxy envoie la demande au service Web. Le service Web dsrialise la demande SOAP pour extraire lID produit, lit le prix unitaire du produit dans la base de donnes, calcule le cot total, lencapsule en XML dans un message de rponse SOAP, puis renvoie ce message de rponse au proxy. Le proxy dsrialise les donnes XML puis les transmet au code de la mthode calculerCout_Click. Le cot pour 5 units du produit 3 apparat dans le formulaire (50).
Astuce Si vous obtenez une exception avec le message Erreur en calculant le cot : Il nexistait pas de point de terminaison lcoute sur http://localhost:4500/ServiceInformationsProduit/Service.svc pouvant accepter le message , le serveur de dveloppement a probablement arrt son excution (il sarrte sil est inactif pendant un moment). Pour le redmarrer, basculez vers linstance Visual Studio 2010 du service Web InformationsProduit, faites un clic droit sur Service.svc dans lExplorateur de solutions, puis cliquez sur Afficher dans le navigateur. Fermez Internet Explorer lorsquil apparat.

3. Faites des tests en saisissant les ID dautres produits. Notez que si vous entrez un ID dun produit qui nexiste pas, le service Web retourne la valeur 0 pour le cot total. 4. Lorsque vous avez fini, fermez le formulaire et retournez dans Visual Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

Studio.

Cration du service Web REST DetailsProduit


Dans la section prcdente, vous avez construit et utilis un service Web SOAP pour implmenter une petite partie dune fonctionnalit procdurale. Dans le prochain ensemble dexercices, vous allez concevoir le service Web DetailsProduit qui permet un utilisateur de rechercher les dtails des produits. Cette forme de service Web est naturellement navigationnelle si bien que vous allez limplmenter en utilisant le modle REST. Vous allez commencer par crer un contrat de donnes pour transmettre des objets Produit sur le rseau. Vous pouvez accder un service Web REST partir dune application cliente dune manire similaire un service Web SOAP (en utilisant un objet proxy qui cache la complexit denvoi dun message sur un rseau partir dune application cliente). Cependant, Visual Studio ne prend pas en charge actuellement la gnration de classes proxy pour les services Web REST automatiquement, si bien que vous allez crer la classe proxy manuellement. Ce nest pas ncessairement une bonne pratique de dupliquer du code comme les contrats de service travers les services Web et les clients car cela rend difficile la maintenance. Pour ces raisons, vous allez adopter une approche un peu diffrente pour concevoir le service Web.

Cration du contrat de donnes du service Web


1. Si vous utilisez Visual Studio 2010, effectuez les tches suivantes pour crer un nouveau projet de bibliothque de classes : 1.1. Dans linstance de Visual Studio que vous utilisez pour diter lapplication cliente, dans le menu Fichier, pointez Nouveau, puis cliquez sur Projet. 1.2. Dans la bote de dialogue Nouveau projet, dans le volet gauche, sous Visual C#, cliquez sur Windows. 1.3. Dans le volet du milieu, slectionnez le modle Bibliothque de classes.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web 1.4. Dans la zone de texte Nom, saisissez ContratsDetailsProduit. 1.5. Dans la zone de texte Emplacement, spcifiez le dossier \Visual C Sharp Etape par tape\Chapitre 29 de votre dossier Documents. 1.6. Cliquez sur OK. 2. Si vous utilisez Microsoft Visual C# 2010 Express, effectuez les tches suivantes pour crer un nouveau projet de bibliothque de classes : 2.1. Dmarrez Visual C# 2010 Express sil nest pas dj ouvert. 2.2. Dans le menu Fichier, cliquez sur Nouveau projet. 2.3. Dans la bote de dialogue Nouveau projet, dans le volet du milieu, slectionnez le modle Bibliothque de classes. 2.4. Dans la zone de texte Nom, saisissez ContratsDetailsProduit. 2.5. Cliquez sur OK. 2.6. Dans le menu Fichier, cliquez sur Enregistrer ContratsDetailsProduit. 2.7. Dans la bote de dialogue Enregistrer le projet, dans la zone de texte Emplacement, spcifiez le dossier \Visual C Sharp Etape par tape\Chapitre 29 de votre dossier Documents. 2.8. Cliquez sur Enregistrer. 3. Dans le menu Projet, cliquez sur Ajouter une rfrence. 4. Dans la bote de dialogue Ajouter une rfrence, cliquez sur longlet .NET. Slectionnez les assemblys System.Data.Linq, System.ServiceModel, System.ServiceModel.Web, et System.Runtime.Serialization puis cliquez sur OK. 5. Dans lExplorateur de solutions, faites un clic droit sur le fichier Class1.cs puis cliquez sur Renommer. Modifier le nom du fichier Produit.cs. Autorisez Visual Studio modifier toutes les rfrences de Class1 Produit lorsque cela apparat. 6. Faites un double clic sur le fichier Produit.cs pour lafficher dans la fentre Code sil nest pas dj ouvert. 7. Dans le fichier Produit.cs, ajoutez les instructions using suivantes la

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

liste en haut :
using System.Runtime.Serialization; using System.Data.Linq.Mapping;

8. Prfixez la classe Produit avec les attributs Table et DataContract, illustrs en gras :
[Table (Name="Products")] [DataContract] public class Produit { }

Vous allez utiliser LINQ to SQL pour rcuprer les donnes de la base de donnes Northwind. Souvenez-vous (voir le chapitre 25) que lattribut Table marque la classe comme une classe Entity. La table est appele Products dans la base de donnes Northwind. 9. Ajoutez les proprits en gras la classe Produit. Assurez-vous de prfixer chaque proprit avec les attributs Column et DataMember. Notez que certaines de ces proprits sont nullable.
[DataContract] public class Produit { [Column] [DataMember] public int ProductID { get; set; } [Column] [DataMember] public string ProductName { get; set; } [Column] [DataMember] public int? SupplierID { get; set; } [Column] [DataMember] public int? CategoryID { get; set; } [Column] [DataMember] public string QuantityPerUnit { get; set; } [Column] [DataMember]

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web


public decimal? UnitPrice { get; set; } [Column] [DataMember] public short? UnitsInStock { get; set; } [Column] [DataMember] public short? UnitsOnOrder { get; set; } [Column] [DataMember] public short? ReorderLevel { get; set; } [Column] [DataMember] public bool Discontinued { get; set; }

La prochaine tape consiste dfinir le contrat de service du service Web DetailsProduit.

Cration du contrat de service du service Web REST


1. Dans le menu Projet, cliquez sur Ajouter une classe. 2. Dans la bote de dialogue Ajouter une classe, dans le volet du milieu, slectionnez le modle Classe. Dans la zone de texte Nom, saisissez IDetailsProduit.cs, puis cliquez sur Ajouter. 3. Dans la fentre Code affichant le fichier IDetailsProduit.cs, ajoutez les instructions using suivantes la liste en haut du fichier :
using System.ServiceModel; using System.ServiceModel.Web;

4. Modifiez la classe IDetailsProduit en une interface publique, et prfixez-la avec lattribut ServiceContract, comme indiqu ici en gras :
[ServiceContract] public interface IDetailsProduit { }

5. Ajoutez la dfinition de la mthode TrouverProduit en gras linterface IDetailsProduit :


[ServiceContract]

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

public interface IDetailsProduit { [OperationContract] [WebGet(UriTemplate = "produits/{idProduit}")] Produit TrouverProduit(string idProduit); }

La mthode TrouverProduit prend un ID produit et retourne un objet Produit pour le produit qui possde cet ID. Lattribut OperationContract indique que cette mthode doit tre expose comme une mthode Web (si vous omettez lattribut OperationContract, la mthode nest pas accessible aux applications clientes). Lattribut WebGet indique que cest une opration de recherche logique, et le paramtre UriTemplate spcifie le format de lURL que vous fournissez pour appeler cette opration, relative ladresse de base du service Web. Dans ce cas, vous pouvez spcifier lURL suivante pour rechercher le produit avec idProduit 7 :
http://host/service/produits/7

Les termes host et service reprsentent ladresse de votre serveur Web et le nom du service Web. Llment de UriTemplate entre accolades indique que les donnes sont transmises comme paramtre la mthode TrouverProduit. Lidentificateur entre accolades doit correspondre au nom du paramtre. 6. Dans le menu Gnrer, Cliquez sur Gnrer la solution et vrifiez que la bibliothque de classes se compile sans erreur. Le projet cre un assembly appel ContratsDetailsProduit.dll. Maintenant que vous avez gnr un assembly qui dfinit le contrat de donnes et le contrat de service du service Web, vous pouvez gnrer le service Web lui-mme.

Cration du service Web REST


1. Ouvrez une autre instance de Visual Studio ou de Visual Web Developer Express.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

Important Nutilisez pas linstance que vous avez utilise pour crer le service Web SOAP car cette copie de Visual Studio doit continuer de tourner pour garder le serveur Web de dveloppement hbergeant le service Web SOAP ouvert.

2. Si vous utilisez Visual Studio 2010, dans le menu Fichier, pointez Nouveau, puis cliquez sur Site Web. 3. Si vous utilisez Visual Web Developer 2010 Express, dans le menu Fichier, cliquez sur Nouveau site Web. 4. Dans la bote de dialogue Nouveau site Web, cliquez sur le modle Service WCF. Slectionnez Systme de fichiers dans la zone de liste droulante Emplacement, et spcifiez le dossier \Visual C Sharp Etape par tape\Chapitre 29\DetailsProduitService de votre dossier Documents puis cliquez sur OK. 5. Cliquez sur le projet C:\...\DetailsProduitService\. Dans la fentre Proprits, initialisez la proprit Utiliser des ports dynamiques False et la proprit Numro de port 4600.
Note Il est important de spcifier un port diffrent du service Web ServiceInformationsProduit ; sinon, les deux services Web entreront en conflit.

6. Dans le menu Site Web, cliquez sur Ajouter une rfrence. Dans la bote de dialogue Ajouter une rfrence, cliquez sur longlet Parcourir. Dans la barre doutils, cliquez sur le bouton Dossier parent, allez dans le dossier ContratsDetailsProduit\ContratsDetailsProduit\bin\Debug, slectionnez lassembly ContratsDetailsProduit.dll, puis cliquez sur OK. 7. Dans lExplorateur de solutions, dveloppez le dossier App_Code sil nest pas dj ouvert, faites un clic droit sur le fichier Service.cs, puis cliquez sur Renommer. Modifiez le nom du fichier en DetailsProduit.cs. 8. Dans le dossier App_Code, supprimez le fichier IService.cs. Ce fichier nest pas ncessaire au service Web. 9. Faites un double clic sur le fichier DetailsProduit.cs pour lafficher dans la fentre Code. 10. Ajoutez les instructions using suivantes la liste en haut du fichier :

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

using System.Data.Linq; using System.Data.SqlClient; using ContratsDetailsProduit;

11. Modifiez la dfinition de la classe Service, modifiez le nom en DetailsProduit, et spcifiez quelle implmente linterface IDetailsProduit, comme indiqu ici en gras. Supprimez les mthodes GetData et GetDataUsingDataContract de la classe DetailsProduit :
public class DetailsProduit : IDetailsProduit { }

12. Ajoutez la mthode TrouverProduit (ici en gras) la classe DetailsProduit :


public class DetailsProduit : IDetailsProduit { public Produit TrouverProduit(string idProduit) { int ID = Int32.Parse(idProduit); SqlConnectionStringBuilder generateur = new SqlConnectionStringBuilder(); generateur.DataSource = ".\\SQLExpress"; generateur.InitialCatalog = "Northwind"; generateur.IntegratedSecurity = true; DataContext contexteProduits = new DataContext(generateur.ConnectionString); Produit produit = (from p in contexteProduits.GetTable<Produit>() where p.ProductID == ID select p).First(); } return produit;

LID produit est transmis la mthode comme une chane, si bien que la premire instruction la convertit en entier et stocke le rsultat dans la variable ID. Le code cre alors un objet DataContext qui se connecte la base de donnes Northwind. La requte LINQ recherche toutes les lignes qui ont un ID produit qui correspond la valeur de la variable ID. Il doit y avoir au moins un produit correspondant. Habituellement, vous devez parcourir les rsultats dune requte LINQ to SQL pour rcuprer chaque ligne tour tour, mais sil ny a quune Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

seule ligne vous pouvez utiliser la mthode dextension First pour rcuprer les donnes immdiatement. Lobjet Produit rcupr par la requte est retourn comme rsultat de la mthode. La prochaine tape consiste configurer le service Web REST pour fournir la chane de connexion que lassembly ContratsDetailsProduit utilise pour se connecter la base de donnes, puis spcifier le protocole et le point de terminaison que les applications clientes peuvent utiliser pour communiquer avec le service Web.

Configuration du service Web


1. Dans lExplorateur de solutions, faites un double clic sur le fichier Web.config pour lafficher dans la fentre Code. 2. Ajoutez llment <services> et les lments enfants en gras llment <system.serviceModel>, avant llment <behaviors>. Aussi, ajoutez llment <endpointBehaviors> en gras comme un enfant de llment <behaviors>. Notez que vous devez pleinement qualifier le nom de linterface qui fournit le contrat de service avec lespace de noms ContratsDetailsProduit.
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="false" targetFramework="4.0" /> </system.web> <system.serviceModel> <services> <service name="DetailsProduit"> <endpoint address="" binding="webHttpBinding" contract="ContratsDetailsProduit.IDetailsProduit" behaviorConfiguration="WebBehavior"/> </service> </services> <behaviors> <endpointBehaviors> <behavior name="WebBehavior"> <webHttp/> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior> <!-- To avoid disclosing metadata information, set the value below

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

to false and remove the metadata endpoint above before deployment --> <serviceMetadata httpGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>

Ce service Web utilise une liaison diffrente du service Web InformationsProduit Web (webHttpBinding). La liaison webHttpBinding et le comportement WebBehavior indiquent que le service Web attend que les requtes soient envoyes en suivant le style REST, encodes dans lURL, et doit retourner les messages de rponses au format POX (XML plein). 3. Dans lExplorateur de solutions, faites un double clic sur le fichier Service.svc pour lafficher dans la fentre Code. Mettez jour les lments Service et CodeBehind pour faire rfrence la classe DetailsProduits du fichier DetailsProduit.cs, comme ici en gras :
<%@ ServiceHost Language="C#" Debug="true" Service="DetailsProduit" CodeBehind="~/App_Code/DetailsProduit.cs" %>

4. Dans le menu Gnrer, cliquez sur Gnrer le site Web. 5. Dans lExplorateur de solutions, faites un clic droit sur Service.svc, puis cliquez sur Afficher dans le navigateur. Internet Explorer apparat affichant la page du service DetailsProduit. 6. Dans la barre dadresse, spcifiez lURL suivante et appuyez sur la touche Entre :
http://localhost:4600/DetailsProduitService/Service.svc/produits/5

Cette URL appelle la mthode TrouverProduit du service Web DetailsProduit et spcifie le produit 5. La mthode TrouverProduit recherche les donnes du produit 5 de la base donnes Northwind et retourne les informations sous la forme dun objet Produit, srialis en XML. Internet Explorer doit afficher la reprsentation XML de ce produit.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

7. Fermez Internet Explorer.

Consommation du service Web REST DetailsProduit


Vous avez vu comment appeler un service Web REST assez facilement partir dun navigateur Web en spcifiant simplement une URL approprie. Pour appeler des mthodes dun service Web REST partir dune application, vous pouvez construire une classe proxy, similaire celle utilise par une application cliente se connectant un service Web SOAP. Comme mentionn prcdemment, Visual Studio ne fournit pas de fonctionnalits qui peuvent gnrer une classe proxy pour un service Web REST. Heureusement, il nest pas difficile de crer une simple classe proxy REST manuellement ; vous pouvez utiliser la mme classe gnrique ClientBase que celle quemploie une classe proxy SOAP. Dans le dernier exercice, vous allez retourner lapplication ClientProduit et ajouter les fonctionnalits pour appeler la mthode TrouverProduit du service Web REST.

Appel du service Web REST de lapplication cliente


1. Retournez dans linstance de Visual Studio ou Visual C# Express que vous avez utilise pour crer le contrat de service du service Web REST. 2. Ouvrez la solution ClientProduit du dossier \Visual C Sharp Etape par tape\Chapitre 29\ClientProduit de votre dossier Documents. Cest lapplication cliente que vous avez utilise pour tester le service Web SOAP prcdemment dans ce chapitre. 3. Dans le menu Projet, cliquez sur Ajouter une rfrence. Dans la bote de dialogue Ajouter une rfrence, cliquez sur longlet Parcourir. Dans

Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

la barre doutils, cliquez sur Dossier parent deux fois, allez dans le dossier ContratsDetailsProduit\ContratsDetailsProduit\bin\Debug, slectionnez lassembly ContratsDetailsProduit, puis cliquez sur OK. 4. Dans le menu Projet, cliquez nouveau sur Ajouter une rfrence. Dans la bote de dialogue Ajouter une rfrence, cliquez sur longlet .NET. Slectionnez lassembly System.Data.Linq, puis cliquez sur OK. 5. Dans le menu Projet, cliquez sur Ajouter une classe. Dans la bote de dialogue Ajouter un nouvel lment ClientProduit, dans le volet du milieu, cliquez sur le modle Classe. Dans la zone de texte Nom, saisissez ProxyClientProduit.cs, puis cliquez sur Ajouter. 6. Dans la fentre Code affichant le fichier ProxyClientProduit.cs, ajoutez les instructions using suivantes la liste en haut du fichier :
using System.ServiceModel; using ContratsDetailsProduit;

7. Modifiez la dfinition de la classe ProxyClientProduit de manire ce quelle hrite de la classe gnrique ClientBase et implmente linterface IDetailsProduit. Spcifiez linterface IDetailsProduit comme paramtre de type de la classe ClientBase. La classe ProxyClientProduit doit ressembler ceci :
class ProxyClientProduit : ClientBase<IDetailsProduit>, IDetailsProduit { }

8. Ajoutez la mthode TrouverProduit en gras la classe ProxyClientProduit. Cette mthode suit le mme schma que celui utilis par le proxy SOAP illustr plus haut dans ce chapitre ; il transmet la demande du client au canal de communication.
class ProxyClientProduit : ClientBase<IDetailsProduit>, IDetailsProduit { public Produit TrouverProduit(string idProduit) { return this.Channel.TrouverProduit(idProduit); } }

9. Affichez le fichier ClientProduit.xaml dans la fentre Concepteur. 10. Faites un double clic sur le bouton Trouver le produit pour gnrer la

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

mthode du gestionnaire dvnement trouverProduit_Click de ce bouton. 11. Dans la fentre Code, ajoutez les instructions using suivantes la liste en haut du fichier ClientProduit.xaml.cs :
using ContratsDetailsProduit;

12. Dans la mthode trouverProduit_Click, ajoutez le code en gras suivant :


private void trouverProduit_Click(object sender, RoutedEventArgs e) { ProxyClientProduit proxy = new ProxyClientProduit(); try { Produit produit = proxy.TrouverProduit(idProd.Text); nomProduit.Content = produit.ProductName; idFournisseur.Content = produit.SupplierID.Value; idCategorie.Content = produit.CategoryID.Value; quantiteParUnite.Content = produit.QuantityPerUnit; prixUnitaire.Content = String.Format("{0:C}", produit.UnitPrice.Value); unitesEnStock.Content = produit.UnitsInStock.Value; unitesEnCommande.Content = produit.UnitsOnOrder.Value; seuilReassort.Content = produit.ReorderLevel.Value; enRupture.IsChecked = produit.Discontinued; } catch (Exception ex) { MessageBox.Show("Erreur en rcuprant les dtails du produit : " + ex.Message, "Erreur", MessageBoxButton.OK, MessageBoxImage.Error); } finally { if (proxy.State == CommunicationState.Faulted) { proxy.Abort(); } else { proxy.Close(); } } }

Ce code cre une instance de la classe ProxyClientProduit et lutilise pour appeler la mthode TrouverProduit du service Web REST. Les Dunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

donnes de lobjet Produit retourne sont affiches dans les contrles label du formulaire. 13. Dans lExplorateur de solutions, faites un double clic sur le fichier app.config. Cest le fichier de configuration de lapplication. Il a t gnr automatiquement lorsque vous avez cr le proxy du service Web SOAP dans un exercice prcdent. Il contient un lment <system.serviceModel> qui dcrit le point de terminaison du service Web SOAP, notamment lURL laquelle lapplication doit se connecter. 14. Recherchez llment <client>, et ajoutez llment <endpoint> en gras la section existante <endpoint> :
<client> <endpoint address="http://localhost:4600/DetailsProduitService/Service.svc" binding="webHttpBinding" contract="ContratsDetailsProduit.IDetailsProduit" behaviorConfiguration="WebBehavior"> </endpoint> <endpoint address="http://localhost:4500/ServiceInformationsProduit/Service.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IInformationsProduit" contract="ServiceInformationsProduit.IInformationsProduit" name="WSHttpBinding_IInformationsProduit"> <identity> <userPrincipalName value="VotreOrdinateur\VotreNom" /> </identity> </endpoint> </client>

15. Aprs la balise fermante </client>, ajoutez la section <behaviors> en gras :


<client> ... </client> <behaviors> <endpointBehaviors> <behavior name="WebBehavior"> <webHttp /> </behavior> </endpointBehaviors> </behaviors>

Ce code dfinit le comportement WebBehavior rfrenc par le

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

client point de terminaison. Il spcifie que le client doit se connecter au service Web en utilisant le comportement webHttp attendu par le service Web REST. 16. Dans le menu Dboguer, cliquez sur Dmarrer sans dbogage. 17. Lorsque le formulaire Dtails du produit apparat, dans la zone de texte ID Produit, saisissez 10 ; dans la zone de texte Combien, saisissez 5 ; puis cliquez sur Calculer le cot. Le cot total doit tre affich (155). Cela permet de vrifier si le service Web SOAP fonctionne toujours. 18. Cliquez sur Trouver le produit. Les dtails pour Ikura doivent apparatre dans les tiquettes du formulaire, comme dans la figure suivante :

19. Testez avec dautres ID produit. Notez que si vous spcifiez un ID produit qui nexiste pas, le service Web retourne une exception Bad Request . 20. Fermez le formulaire Dtails du produit lorsque vous avez termin. Dans ce chapitre, vous avez vu comment utiliser Visual Studio pour concevoir deux styles diffrents de service Web : SOAP et REST. Vous avez galement vu comment concevoir des applications clientes qui peuvent utiliser ces styles de service Web. Vous avez galement termin tous les exercices de ce livre. Vous devez maintenant connatre trs bien le langage C# et comprendre comment utiliser Visual Studio 2010 pour gnrer des applications professionnelles. Cependant, ce nest pas la fin de lhistoire. Vous avez saut la premire haie, mais les meilleurs programmeurs C# apprennent en pratiquant, et vous pouvez acqurir cette exprience uniquement en gnrant des apDunod 2010 Visual C#2010 tape par tape John Sharp

Partie 6 Cration de solutions professionnelles

plications C#. Vous allez ainsi dcouvrir de nouvelles faons dutiliser le langage C# et de nombreuses fonctionnalits disponibles dans Visual Studio 2010 que je nai pas eu la place de traiter dans ce livre. Noubliez pas galement que C# est un langage qui volue. En 2001, lorsque nous avons crit la premire dition de ce livre, C# prsentait une syntaxe et une smantique permettant de gnrer des applications qui utilisaient le .NET Framework 1.0. Certaines amliorations ont t ajoutes Visual Studio et au .NET Framework 1.1 en 2003, puis en 2005, C# 2.0 est apparu et prenait en charge les gnriques et le .NET Framework 2.0. C# 3.0 a ajout de nombreuses fonctionnalits telles que les types anonymes, les expressions lambda, et la plus significative, LINQ. Et maintenant C# 4.0 a tendu le langage encore plus avec la prise en charge des arguments nomms, des paramtres optionnels, des interfaces contra et covariant, et lintgration avec des langages dynamiques. La prochaine version de C# nous rservera sans doute dautres surprises

Aide-mmoire du chapitre 29
Pour
Crer un service Web SOAP

Accomplissez
Utilisez le modle Service WCF. Dfinissez un contrat de service qui spcifie les mthodes Web exposes par le service Web en crant une interface avec lattribut ServiceContract. Marquez chaque mthode avec lattribut OperationContract. Crez une classe qui implmente cette interface. Configurez le service pour utiliser la liaison wsHttpBinding.

Crer un service Web REST

Utilisez le modle Service WCF. Dfinissez un contrat de service qui spcifie les mthodes Web exposes par le service Web en crant une interface avec lattribut ServiceContract. Balisez chaque mthode avec lattribut OperationContract et lattribut WebGet, qui spcifie le modle URI pour appeler la mthode. Crez une classe qui implmente cette interface. Configurez le service pour utiliser la liaison webHttpBinding, et spcifiez le comportement webHttp pour le point de terminaison du service.

Dunod 2010 Visual C#2010 tape par tape John Sharp

Chapitre 29 Cration et utilisation dun service Web

Pour
Afficher la description dun service Web SOAP

Accomplissez
Faites un clic droit sur le fichier .svc dans lExplorateur de solutions, et cliquez sur Afficher dans le navigateur. Internet Explorer sexcute, va sur ladresse du service Web, et affiche une page dcrivant comment crer une application cliente pouvant accder au service Web. Cliquez sur le lien WSDL pour afficher la description WSDL du service Web. Dfinissez une classe pour contenir les donnes, et balisez-la avec lattribut DataContract. Assurez-vous que chaque lment des donnes est accessible soit comme champ public soit via une proprit publique qui fournit les accs get et set. Assurez-vous que la classe possde un constructeur par dfaut (qui peut tre vide). Dans le menu Projet, cliquez sur Ajouter une rfrence de service. Saisissez lURL du service Web dans la zone de texte Adresse en haut de la bote de dialogue, puis cliquez sur Aller . Spcifiez lespace de noms de la classe proxy, puis cliquez sur OK. Crez une classe qui hrite de la classe gnrique ClientBase, et spcifie linterface qui dfinit le contrat de service en tant que paramtre de type. Implmentez cette interface, et utilisez la proprit Channel hrite de la classe ClientBase pour envoyer des demandes au service Web. Crez une instance de la classe proxy. Appelez la mthode Web en utilisant la classe proxy.

Transmettre des donnes complexes en tant que mthode Web et retourner des valeurs Crer une classe proxy dun service Web SOAP dans une application cliente Crer une classe proxy dun service Web REST dans une application cliente

Appeler une mthode Web

Dunod 2010 Visual C#2010 tape par tape John Sharp

Vous aimerez peut-être aussi