Créer une architecture .NET distribuée

Créer et utiliser un service Web .NET

Comprendre les services Web XML

Les services Web sont des unités discrètes de fonctionnalité programmée et exposée aux clients via des protocoles de communication et des formats de données standardisés, à savoir HTTP et XML. Ces protocoles et formats sont bien connus et largement acceptés.

En communiquant via HTTP, les services Web résolvent le problème de la communication sur Internet et au travers des pare-feu d’entreprise sans faire appel à des solutions propriétaires qui imposent l’ouverture de ports de communication supplémentaires pour les accès externes. Les services Web utilisant XML pour la mise en forme des demandes et des réponses, ils peuvent être exposés et utilisés par toute plate-forme capable de mettre en forme ou d’analyser un message XML. Cela permet à ces services d’assembler des blocs de fonctionnalité disparates, existants ou nouveaux, internes ou externes à une organisation, en un ensemble cohérent.

OK, et CORBA alors? Il est vrai que CORBA va adresser tous ces sujets. Vous pouvez avoir des types complexes de données, clients et serveurs peuvent employer n'importe quel mélange de langages et de plates-formes, vous pouvez réutiliser la couche métier de votre architecture n-tiers et vous pouvez isoler le client des détails architecturaux du back-end.

Alors pourquoi devrions nous introduire SOAP? Voici quelques raisons:
CORBA exige de compiler et distribuer des stubs client pour chaque type de clients que vous avez. Ce n'est pas toujours pratique, particulièrement quand vous avez un grand nombre de combinaisons de plates-formes et de langages ou quand vous voulez offrir des services à des clients anonymes au travers d'internet. Si vous développez des services Web (voir plus bas) alors IIOP (le protocole de transfert de CORBA) n'est pas particulièrement convivial avec les firewall. Donc si vous voulez offrir des services à des clients au travers d' internet et bien que ce ne soit pas impossible avec CORBA, vous allez devoir surmonter des obstacles liés aux firewall. Le document suivant nous illustre le principe de fonctionnement des WebServices à travers un exemple pratique : un convertisseur Euro écrit en C#.


Fonctionnement des services Web

Le scénario comprend trois étapes :

Nous allons maintenant définir de manière plus concrète l'ensemble de ces technologies afin de bien comprendre leur mode d'utilisation.

Il est primordial de comprendre que SOAP est un protocole basé sur XML et en conséquence, particulièrement prolixe. CORBA, au travers de IIOP, le battra en performance car les opérations de conversion et de déconversion (marshalling et demarshalling) dans CORBA sont plus efficaces et il y a moins de données sur le réseau. Ceci dit, il y a un avantage significatif pour SOAP d'être basé sur du XML: le fait qu'il peut être lu et écrit par des humains. Ceci signifie que vous pouvez lire et manipuler les messages qui passent par le réseau. C'est extrêmement utile quand on débogue.

Un peu de vocabulaire ... Heureusement, le modèle de programmation ASP.NET présente l’avantage de faire complètement abstraction de la complexité de la messagerie SOAP dans le développement des services Web.

Créer un service Web

Avec ASP.NET, les services Web XML sont très simples à créer, parce que ce langage oblitère complètement la complexité de la messagerie SOAP et du transport HTTP pour les développeurs. Cette abstraction s’obtient avec des attributs indiquant au runtime qu’une classe spécifique et ses méthodes doivent être considérées comme des services Web. En fonction de ces attributs, le runtime fournit le code nécessaire pour exposer la classe et les méthodes sous forme de service Web, en fournissant aussi un contrat que les clients peuvent utiliser pour déterminer comment appeler le service et quel type de données il va renvoyer.

Les services Web sont définis dans des fichiers avec l'extension .ASMX. Le code réel du service Web ASP.NET peut en fait résider soit dans le fichier .ASMX, soit dans une classe précompilée.

Syntaxe de déclaration d'un service Web dans lequel la classe est définie dans le fichier asmx:

 
<@ WebService Language="c#" Class="NomClasse" >

Ou soit la syntaxe évoquée dans le cas où le code définissant la classe et les méthodes réside dans une classe compilée :
 
<%@ WebService Class="NomEspaceDeNom.NomClasse, NomAssemblage" > 

Cet assemblage devrait se trouver dans le répertoire bin de l'application Web dans laquelle réside le fichier .ASMX. La partie NomAssemblage est optionnelles mais il est toujours préférable de la préciser pour éviter l'impact sur les performances avec la recherche réalisée lors du premier accès au service Web. Il n'est pas nécessaire qu'une classe dérive de WebService pour fonctionner comme un service Web, mais la classe fournit des fonctions intéressantes pour les services Web. Il s'agit en particulier de l'accès à Application, Session ou tout autre objet ASP.NET dont l'objet Context, qui permet d'accéder aux informations concernant la demande HTTP qui appelle le service Web.

Les services Web XML utilisent l'espace de noms XML pour identifier de façon unique la cible ou le service d'écoute auquel un client envoie ses demandes, ASP.NET définit par défaut l'espace de noms XML d'un service web en http://tempuri.org. Si on prévoit de rendre son service web publiquement disponible sur internet, modifier l'espace de noms par défaut pour éviter tout conflit potentiel avec d'autres services Web XML utilisant le même nom que celui de son service, et qui pourraient aussi utiliser l'espace de noms par défaut. ? Propriété NameSpace de l'attribut de métadonnée WebService


Une question qui se pose fréquemment dans la mise en œuvre des WebServices est la suivante :
    « Puis-je passer n’importe quel type d’objet en paramètre tels que des ResultSet Java ou des DataSet .NET ?
    » La réponse se trouve dans la matrice à l'adresse (http://www.dotnetguru.org/articles/InteropWS/InteropWSJavaDotNet.htm).

En effet, il n’existe aucun mapping prenant en compte l’ensemble des API .NET ou Java (ou autre) avec Soap, c’est pourquoi, les WebServices, au même titre que  les ponts .NET Remoting et RMI (JaNet), ne doivent pas être utilisés afin de véhiculer des graphes d’objets dépendants d’un Framework technique. D’ailleurs, cela n’a pas beaucoup de sens étant donné la complexité inhérente aux Frameworks .NET et Java.  Pour cela , il faudrait disposer des mêmes API de part et d’autre, on sait bien aujourd’hui, que ce n’est pas le cas.
Quand vous utilisez HTTP GET ou HTTP POST pour les demandes de service Web, le jeu de types de données supportés est plus limité, tous ces types étant représentés par des chaînes pour le client. De plus les paramètres d'entrée ne peuvent être transmis que par valeur, alors que les paramètres des demandes SOAP peuvent être transmis soit par valeur, soit par référence.



L'important dans la publication est de savoir comment diffuser son service web de façon à ce que les clients intéressés puissent le découvrir facilement et l'intégrer à leurs applications.

La découverte de service Web est le processus de recherche et d'interrogation des descriptions du service Web, qui correspond à l'étape préliminaire pour un accès à un service Web XML. C'est par l'intermédiaire du processus de découverte que les clients du service Web apprennent son existence, découvrent ses fonctionnalités et la façon d'interagir correctement avec lui.
Une fois le service Web XML déployé, vous devez étudier un moyen qui permette aux développeurs de le localiser, pour que d'autres usagers y accèdent. Une solution qui a fait ses preuves est de l'inscrire dans un répertoire de Services Web. Le projet UDDI (Universal Description, Discovery and Integration) propose un répertoire des entreprises et des services qu'elles offrent. ASP.NET va générer un ensemble de pages de documentation décrivant les méthodes Web disponibles et la syntaxe que les clients peuvent appliquer pour accéder à ces méthodes.

Utiliser un service Web

L'utilisation d'un service web se fait selon les étapes suivantes :


Sous Visual Studio : L'accès à un service Web XML à partir d'un code géré est un processus simple. Attention la classe proxy est nécessaire, lorsque vous ne pouvez pas accéder au service Web XML depuis la machine sur laquelle est installé Visual Studio, par exemple lorsque le service Web XML se trouve sur un réseau inaccessible au client au moment de l'exécution. Ensuite, vous ajoutez manuellement dans votre projet d'application le fichier généré par cet outil.


AIDE MEMOIRE Web Service :

Une remarque importante concernant les clients de services Web est qu'ils ne sont pas limités aux formulaires Web ASP.NET. Vous pouvez tout aussi bien intégrer des services Web dans des applications graphiques, des applications console ou même d'autres services Web.


Les Services Web permettent l'échange de messages dans un environnement souple via des protocoles standard tels que HTTP, XML, SOAP et WSDL. Les messages peuvent être structurés et typés, ou définis de manière flexible. Des protocoles standard étant à la base des services Web XML, les applications pour ce type de services peuvent communiquer avec un grand nombre d'implémentations, de plates-formes et de périphériques.

Vous créez des Services Web en utilisant la structure de page ASP.NET qui permet à ces mêmes services d'accéder aux multiples fonctionnalités de .NET Framework. Les Services Web s'appuient sur ASP.NET et .NET Framework, de sorte que les développeurs peuvent se consacrer à la création de services ou à leur accès sans avoir à écrire un code d'infrastructure. L'accès à un service Web XML en code géré est un processus relativement simple lorsque vous utilisez une classe proxy générée directement par Visual Studio à partir de la description du service. La classe proxy fait le nécessaire pour convertir l'appel de méthode en un message de requête, et le message de réponse en valeur de retour de méthode.

Valid XHTML 1.0!