Services Web
Rappel Un service Web est une « unité logique applicative » accessible en utilisant les protocoles standard d’Internet accessible depuis une URL Caractéristiques: Réutilisable Indépendamment de la plate-forme (UNIX, Windows, …) l’implémentation (VB, C#, Java, …) l’architecture (.NET, J2EE, …) Source : Devdays 2003
Infrastructure Serveurs Solutions pour l’utilisateur Rappel Infrastructure Serveurs Outils Services Web XML Clients Solutions pour l’utilisateur Authentification SMS Appel Voix Souscriptions DB MMS Appel Données Personnalisation Facturation etc. Source : DevDays 2003
Quelques exemples MapPoint Cartographie, calcul d’itinéraires Localisation de points
Quelques exemples INFOBEL : Service d’annuaire Permet l’utilisation classique de l’annuaire dans les applications .NET Gestion d’un annuaire inversé Tolérance sur les orthographes des adresses Présent en Europe et aux US
Avantages Plus de limitations contrairement aux anciennes technos : DCOM, RMI, CORBA Plus de problème de pare-feu Plus de problème d’interopérabilité Plus de problème de formatage des données Pb de pare-feu : protocoles binaires utilisent une connexion point à point nécessitant l’ouverture de ports Pb d’interopérabilité : chaque modèle utilise son propre protocole propriétaire Pb de format : l’encodage des données diffère selon les protocoles
Avantages Repose sur des standards HTTP XML SOAP WSDL
Services web et VS.net Création Service WEB
Services web et VS.net Code :
Services web et VS.net Consommer un service web Ajouter une référence Web
Services web et VS.net Fichier WSDL : classe proxy générée par VS.net Fichier DISCO : fichier de découverte des SW, définit les liens vers le wsdl, etc.. Fichier map : contient les infos concernant les références DISCO et WSDL Disco => propriétaire Microsoft. Ce n’est pas un standard
TP Créer service web soustraire.asmx Créer application Windows qui consomme le service web
Fonctionnement d’un service web
Serveur Annuaire UDDI Client J’ai trouvé! Voici le serveur hébergeant ce service web Annuaire UDDI un service WEB Je recherche Quel est le format d’appel du service que tu proposes? Contrat SOAP Voici mon contrat (WSDL) XML Client XML J’ai compris comment invoquer ton service et je t’envoie un document XML représentant ma requête Source Devdays 2003 XML J’ai exécuté ta requête et je te retourne le résultat
Les standards derrière les services web SOAP WSDL UDDI
SOAP Simple Object Access Protocol Protocole d’échange de données basés sur XML
SOAP SOAP Envelope SOAP Header SOAP Body <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi=…> <soap:Header> <WoodgroveAuthInfo xmlns="http://tempuri.org/"> <Username>string</Username> <Password>string</Password> </WoodgroveAuthInfo> </soap:Header> <soap:Body> <GetAccount xmlns="http://tempuri.org/"> <acctID>int</acctID> </GetAccount> </soap:Body> </soap:Envelope>
SOAP : Requête
SOAP : Réponse
WSDL Document de description du service Web Rédigé en XML Description des types de données via des schémas XSD Accessible pour les SW.net en ajoutant ?WSDL à l’url du SW
WSDL Structure of a WSDL document The types element The message element The portType element Web Service Consumer Web Service The binding element The service element
WSDL Element type : définit les types utilisés dans le message Définition des types via un XSD
WSDL Element message Définition du message (requête / réponse)
WSDL Element portType Permet de définir les points logiques d’entrée et de sortie pour le service web (protocole utilisé, méthode correspondante) Renvoie vers un élement Binding
WSDL Element binding Après avoir définit le port logique, on doit définir comment envoyer des données sur le port auquel est rattachée la méthode que l’on veut exécuter
WSDL Element service : permet de définir les ports pour chaque service
Proxies & WSDL Nécessité d’utiliser un proxy afin de manipuler un objet au lieu d’un document XML (WSDL) Création d’une classe correspondant au WSDL Génération de la classe automatique avec VS.net
Proxies & WSDL Création de proxies manuellement Utilisation de l’utilitaire wsdl.exe livré dans le SDK du framework .net
Proxies & WSDL Syntaxe Example Example wsdl [options] {URL | Path} Par défaut => C#, SOAP Example wsdl /l:VB /protocol:HttpGet /out:Bank.vb http://www.woodgrovebank.com/services/bank.asmx?wsdl
TP Générer un proxy manuellement Utiliser le proxy généré dans une appli console pour récupérer une valeur via un service web
UDDI Universal Description Discovery and Integration Annuaires de services Web XML
UDDI Ensemble de spécifications destiné à normaliser l’accès et la publication : UDDI API pour les développeurs (Publisher / Inquiry) UDDI Data Structure Specification définit les structures XML utilisés dans les messages
Optimiser appels Service Web Appels Asynchrones Cache
Appels asynchrones Appels synchrones simples à faire (2 lignes de code) mais ont des inconvénients : Figeage de l’interface (si client windows) Plantage si service web est inaccessible
Appels asynchrones Les appels asynchrones permettent de lancer l’exécution d’une méthode, de reprendre la main, puis de récupérer le résultat grâce à une fonction CallBack Fonction possible grâce à la classe proxy générée par VS.net
Appels asynchrones
Appels asynchrones
Mise en cache Pour les méthodes nécessitant beaucoup de calcul, mettre en place un cache pour optimiser les temps de réponse [WebMethod(CacheDuration=30)] =>cache pendant 30 sec.
TP Appel méthode en asynchrone
Sécuriser Services Web Sécurité IIS SOAP
Sécuriser Services Web IIS Serveur de pages web, de services web Possibilité d’utiliser toutes les fonctionnalités de IIS pour les services web (authentification, compression, etc…)
Sécurité IIS Mise en place authentification Windows Modification Web.config Configuration du répertoire virtuel dans IIS
TP Mise en place authentification Windows
Auth. Personnalisée : SOAP Il est possible de mettre en place une authentification personnalisée grâce à SOAP en modifiant les headers
Modifier les en-têtes SOAP Créer classe héritant de SoapHeader
Modifier les en-têtes SOAP Déclarer une instance de notre classe : Public AuthHeader sHeader; Marquer les méthodes utilisant l’en tête personnalisé grâce à l’attribut SoapHeader [SoapHeader(« sHeader »)]
Modifier les en-têtes SOAP Si référence web déjà créé lors modif SW, mettre à jour la référence web pour regénérer le proxy Utiliser l’header SOAP lors de l’instanciation du SW
Modifier les en-têtes SOAP Vérifier les valeurs du header dans le code du service web pour authentifier les utilisateurs
TP Mettre en place une authentification via modification des en-têtes SOAP
Conclusion Services web permettent de mettre en place des applications distribuées Possibilité d’externaliser des services Repose sur des standards (XML, WSDL, SOAP, UDDI) Possibilité d’utiliser les fonctionnalités de IIS Possibilité de modifier les Headers SOAP