Microsoft Technopoche



Documents pareils
Rafraichissement conditionné d'une page en.net

Introduction aux «Services Web»

< Atelier 1 /> Démarrer une application web

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Module.NET 3 Les Assemblys.NET

Déployer une application cliente avec le Framework.NET 3.5 Client Profile

Intégration d'applications à "gros grain" Unité d'intégration : le "service" (interface + contrat)

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Hébergement et configuration de services WCF. Version 1.0

DotNet. Plan. Les outils de développement

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

Le serveur web Windows Home Server 2011

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Tsoft et Groupe Eyrolles, 2005, ISBN :

Printer Administration Utility 4.2

Architectures web/bases de données

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Programmation Web Avancée Introduction aux services Web

Approche Contract First

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

L3 informatique TP n o 2 : Les applications réseau

Mise en œuvre des serveurs d application

Guide Tenrox R8.7 de configuration de Microsoft Reporting Services

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Pré-requis pour les serveurs Windows 2003, Windows 2008 R2 et Windows 2012

GPI Gestion pédagogique intégrée

Rapport de Mini-Projet en ArcGIS Engine

Déploiement et monitoring

On Feature Interaction among Web Services Michael Weiss et Babak Esfandiari

Procédure d'installation complète de Click&Decide sur un serveur

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

avast! EP: Installer avast! Small Office Administration

WorkflowGen 6.0 Guide de mise à jour

TP3-2 CONSTRUISEZ VOTRE PREMIER SERVICE AZURE

WebParts. Version 1.0

Guide de migration BiBOARD V10 -> v11

Créer et partager des fichiers

(structure des entêtes)

Plateforme PAYZEN. Définition de Web-services

La double authentification dans SharePoint 2007

Olivier Deheurles Ingénieur conception et développement.net

Guide d installation BiBOARD

Volet Synchrone pour Client Lourd

K?ellaWeb Saisie des absences, retards et sanctions APLON en mode Web

Mettre en place un accès sécurisé à travers Internet

Serveurs de noms Protocoles HTTP et FTP

Chapitre 1 Windows Server

Procédure d'installation de SQL Server Express 2008

MANUEL D'INSTALLATION SUR WINDOWS 2003/2008 SERVER

Reporting Services - Administration

BPEL Orchestration de Web Services

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

WebSpy Analyzer Giga 2.1 Guide de démarrage

Host Integration Server 2000

Installation-Lancement

Classification : public 1/59

Windows Internet Name Service (WINS)

Guide d installation d AppliDis Free Edition sur Windows Serveur 2008 R2

Sauvegarde d'une base de données SQL Server Express 2005

STATISTICA Version 12 : Instructions d'installation

Guide des services Web 7.0

Mobile OGSI.NET: Grid Computing on Mobile Devices

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

Tropimed Guide d'installation

Guide de connexion Wi-Fi sur un hotspot ADP Télécom

Créer un rapport pour Reporting Services

Corrigé de l'atelier pratique du module 8 : Implémentation de la réplication

Module BD et sites WEB

Introduction aux. services web 2 / 2

Manuel d intégration API SOAP SMS ALLMYSMS.COM

Serveur FTP. 20 décembre. Windows Server 2008R2

Network Scanner Tool R2.7. Guide de l'utilisateur

Alfstore workflow framework Spécification technique

Mise en œuvre d une Gateway HTTP/HTTPS avec un serveur de Présentation en DMZ

Service de certificat

Déploiement d'une base SQL Express

Configuration Matérielle et Logicielle AGORA V2

BIRT (Business Intelligence and Reporting Tools)

Architectures Web Services RESTful

VERITAS Backup Exec TM 10.0 for Windows Servers

Mise à jour : Octobre 2011

Installation Client (licence réseau) de IBM SPSS Modeler 14.2

Paginer les données côté serveur, mettre en cache côté client

Application Web et J2EE

1 - EXCHANGE Installation

Nokia Internet Modem Guide de l utilisateur

Zeus V3.XX :: PRE-REQUIS TECHNIQUES

Suite logicielle ZOOM version 7.1 Guide d installation 94ZM-ZMJ1F-712

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

TP1 : Initiation à Java et Eclipse

Fiche technique rue de Londres Paris Tél. : Mail : contact@omnikles.com

Gestion des documents avec ALFRESCO

EXTENSION de Microsoft Dynamics CRM Réf FR 80452

Oracle Developer Suite 10g. Guide de l installation. Vista & Seven

Standard. Manuel d installation

Sécurisation du réseau

Création d un service web avec NetBeans 5.5 et SJAS 9

Transcription:

Microsoft Technopoche

2/28 Préface Ce document a été écrit par Olivier SCHMITT, ingénieur Support Développement à Microsoft France. Il est destiné aux développeurs désirant se familiariser avec les Services Web. Il requiert des connaissances de base sur les langages VB.NET et C#. Sommaire 1 Introduction...3 2 Définition d'un Service Web...4 3 Création d une nouvelle solution Service Web avec Visual Studio.NET...4 3.1 Création d une méthode...8 4 Exposition du Service Web...9 4.1 Accès par l explorateur...10 4.2 Types des données...10 4.3 Exemples de transferts de données (marshalling)...11 4.3.1 Méthode Web retournant une structure...11 4.3.2 Méthode Web retournant un tableau...12 5 Tester et déboguer un Service Web...12 6 Déployer un service Web...13 6.1 Installation du package.msi sur le serveur Web...15 7 Création d un client.net...15 7.1 Création de proxies pour les clients...15 7.1.1 Création depuis l interface de Visual Studio.NET...15 7.1.2 Création manuelle du proxy grâce à l'outil wsdl.exe...16 7.2 Client Web Forms......17 7.3 Client Windows Forms...18 8 Création d'un client VB6...18 8.1 SOAP Toolkit...18 8.1.1 Que faut-il pour l installer?...19 8.1.2 Où le télécharger?...19 8.2 Exemple VB6 avec SOAPToolkit...19 9 Analyse des messages transitant sur le réseau...20 9.1 WSClient.mssoapinit......21 9.2 WSClient.HelloWorld...23 10 Conclusion......24 11 Annexe A : Messages SOAP......25 11.1 Structure...25 11.2 Transport...26 11.3 Comment un serveur expose-t-il les fonctionnalités de son Service Web?...26 12 Ressources...28

3/28 1 Introduction L objectif de ce document est de présenter l implémentation de base d un Service Web en utilisant la suite de développement Visual Studio.NET. Au travers de ce document nous verrons comment : Créer un Service Web avec Visual Studio.NET Déployer ce Service Web Créer des applications clientes en.net puis en Visual Basic 6 grâce à SOAP Toolkit Nous nous intéresserons également à SOAP (Simple Object Access Protocol) et plus précisément à la composition d un message ainsi que le dialogue entre le client et le serveur. Pour illustrer ceci nous analyserons la communication entre le client VB6 et le serveur hébergeant notre Service Web.

4/28 2 Définition d'un Service Web Un Service Web est un objet hébergé sur un serveur Web, comme Internet Information Server ou Apache à terme. La philosophie d un Service Web est similaire à un objet distant DCOM que nous connaissons déjà à ce jour, avec cependant une évolution majeure quant aux types de clients pouvant le consommer. Les Services Web s ouvrent sur Internet et à un environnement hétérogène grâce au support du format XML. Concrètement, dans un service Web, on distinguera deux entités entrant en jeu : Le client : Navigateur ou page aspx sur serveur web, client «Windows Forms», Le fournisseur de service : fichiers portant l extension asmx qui sont stockés sur un serveur Web (la présence du.net Framework est indispensable) Le point d entrée d un Service Web est le fichier portant l extension asmx. Ce fichier contient les éléments suivants : L entête délimitée dans <%@ %> un espace de nom (terme US : namespace) les classes implémentant le code Exemple de fichier asmx en Visual Basic.NET <%@ WebService Language="VB" Class="MathService" %> Imports System.Web.Services Imports System Class MathService Implements WebService <WebMethod()> Public Function Add(int1 as Integer, int2 as Integer) as Integer Return (int1+int2) End Function End Class Exemple de fichier asmx en C# <%@ WebService Language="C#" Class="HelloWold" %> using System; using System.Web.Services; public class MathService : WebService { [WebMethod] public int Add (int int1, int int2) { return (int1 + int2); } } Hériter de la classe WebService fournit un accès aux objets natifs ASP.NET :Appli cation, Session, User, Context 3 Création d une nouvelle solution Service Web avec Visual Studio.NET Nous allons voir comment créer un projet du type Service Web. Ce type de projet est indépendant du language et il est possible de créer facilement un Service Web en Visual Basic.NET, C#, Visual C++ ou même en Cobol. Dans notre exemple nous choisirons arbitrairement le C#.

5/28 Voici donc la marche à suivre pour créer un Service Web : 1. Créer une nouvelle solution «Service Web ASP.NET» 2. Indiquer l URL HTTP vers un serveur Web qui va héberger le service Web (par exemple : http://localhost/webservice1) 3. Après avoir renseigné l URL, le répertoire virtuel est créé. Avec l outil d administration de IIS on peut visualiser les informations suivantes : Par défaut le répertoire correspondant au Service Web est situé dans c:\inetpub\wwwroot\webservice1 Remarque : Visual Studio a partagé le répertoire wwwroot (partage caché) et a ajouté le groupe local «VS Developpers» avec les permissions contrôle total sur le répertoire et les sous-répertoires. Visual Studio crée le répertoire de l application en utilisant le chemin UNC : \\<Server Name>\wwwroot$\Webservices1. Ce mécanisme est configurable depuis le menu Outils/options de Visual Studio :

6/28 Dans le cas de la création d une application sur un serveur distant, IIS peut être requis sur la machine de développement. IIS installe un composant COM de communication avec le serveur Web distant intervenant dans la validation du chemin UNC. On remarque que Visual Studio a généré un certain nombre de fichiers. Examinons ces fichiers : Service1.asmx <%@ WebService Language="c#" Codebehind="Service1.asmx.cs" Class="Webservice1.Service1" %> Nous avons vu précédemment un exemple de fichier asmx contenant le code. En fait il existe deux possibilités pour implémenter le code d un Service Web, le «In-Line» et le «Code behind». En mode «In-Line», le code est contenu dans le fichier asmx ; en «Code behind» le fichier asmx contient une référence vers un fichier source qui contient le code. Dans notre cas, «Codebehind» référence le fichier Service1.asmx.cs qui contient le code (écrit en C#) de l implémentation de notre classe. Service1.asmx.cs using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; namespace Webservice1 { /// <summary> /// Description résumée de Service1. /// </summary> public class Service1 : System.Web.Services.WebService { public Service1()

7/28 { } //CODEGEN : Cet appel est requis par le Concepteur des // services Web ASP.NET InitializeComponent(); #region Component Designer generated code //Requis par le Concepteur des services Web private IContainer components = null; /// <summary> /// Méthode requise pour la prise en charge du concepteur - ne /// modifiez pas le contenu de cette méthode avec l'éditeur de code. /// </summary> private void InitializeComponent() { } /// <summary> /// Nettoyage des ressources utilisées. /// </summary> protected override void Dispose( bool disposing ) { if(disposing && components!= null) { components.dispose(); } base.dispose(disposing); } #endregion // EXEMPLE DE SERVICE WEB // L'exemple de service HelloWorld() retourne la chaîne Hello World // Pour générer, retirez les commentaires des lignes suivantes, // puis enregistrez et générez le projet // Pour tester ce service Web, appuyez sur F5 // [WebMethod] // public string HelloWorld() // { // return "Hello World"; // } } } Ce fichier contient les méthodes de notre Service Web. Visual Studio génère le squelette complet de l application. On peut notamment distinguer une fonction HelloWorld() mise en commentaire à titre d exemple. Répertoire bin C est l emplacement par défaut où les applications ASP.NET stockent les fichiers compilés en IL (Intermediate Language). Visual Studio placera automatiquement le code compilé dans ce répertoire. Remarque : Le langage intermédiaire (IL) est un langage similaire à de l assembleur mais n est pas spécifique à une architecture processeur (type x86 ou Alpha). Il existe donc une notion de compilation à la volée (terme US : JIT Compiler) qui va compiler ce code IL en code machine au moment de l exécution. Ce processus permet à une application.net d être exécutée sur n importe quelle plateforme (à terme) sur lequel le moteur d exécution.net a été installé sans être recompilée.

8/28 Découverte Dynamique (.vsdisco) Ce mécanisme est un procédé qu ASP.NET emploie et qui consiste à faire une recherche itérative à travers les répertoires Web du serveur. Il s agit d un fichier au format XML qui peut contenir zéro ou plusieurs nœuds <exclude>. Comme son nom l indique, ce nœud permet de spécifier des répertoires dans lesquels on ne souhaite pas effectuer cette découverte dynamique. Il est recommandé de n utiliser cette fonctionnalité que dans un environnement de test. S il s agit d un serveur de production, l utilisation de la découverte statique est préférable car elle permet de garder le contrôle sur les Services Web que l on choisit d exposer. Découverte statique (.disco) En publiant un fichier portant l extension.disco (toujours au format XML), on a la possibilité de connaître les différents Services Web tournant sur un serveur. Dans notre cas de Service Web par exemple, la requête serait de la forme : http://localhost/webservice1/service.asmx?disco Un exemple de création de fichier.disco est disponible à l adresse ci-dessous : Enabling Discovery for an XML Web Service http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconenablingdiscoveryforwebservice.asp?frame=true Web.Config C est un fichier de configuration écrit au format XML qui est de la même forme que celui d une application ASP.NET. Ce fichier permet la configuration des différentes options du.net Framework et des paramètres spécifiques aux Services Web. Mais ou se trouve le fichier sln? Visual Studio crée le fichier solution dans le cache local du projet, à savoir : C:\Documents and Settings\<userName>\Mes documents\projets Visual Studio\Webservice1 Si l on souhaite ouvrir un Service Web existant depuis un poste sur lequel le projet n a pas été créé, on peut l ouvrir depuis une URL (Menu Fichier / Ouvrir / Projet à partir du Web ) puis générer un fichier solution. 3.1 Création d une méthode L implémentation des méthodes est ajoutée dans le fichier source Service1.asmx.cs comme pour une application classique. On ajoute l attribut WebMethod pour indiquer au compilateur que l on souhaite exposer cette méthode sur le web. L attribut expose également des propriétés permettant de modifier le comportement de la méthode (Voir http://msdn.microsoft.com/library/default.asp?url=/library/enus/vbcon/html/vbtskusingwebmethodattribute.asp) Dans le fichier Service1.asmx.cs, retirer les commentaires pour obtenir la première méthode que l on va un peu modifier : [WebMethod] public string HelloWorld(string user) { return user + ", Bonjour le monde! :)"; }

9/28 4 Exposition du Service Web 1. Générer WebService1 Remarque : On pourra constater WebService1.dll a été généré dans le répertoire Bin\ Il est possible de spécifier un espace de nom (terme US : namespace) au Service Web en ajoutant l attribut [WebService] à la classe puis en régénérant le Service Web [WebService(Namespace= "http://oliviersxp.fr/webservices/", Description= "Description du WebService de Test.")] public class Service1 : System.Web.Services.WebService { } 2. Lancer le service web en tapant F5 ou en cliquant avec le bouton droit de la souris sur Service1.asmx et en sélectionnant «Afficher dans le navigateur» La page Web suivante est alors affichée : Cette page est générée par ASP.NET et permet d une part, de lister les méthodes disponibles, et d autre part, de tester les méthodes en cliquant sur le nom de la méthode.

10/28 4.1 Accès par l explorateur http://localhost/webservice1/service1.asmx?op=helloworld Ceci est le lien vers une page de description détaillée des paramètres entrée/sortie de la méthode ainsi que les explications sur la manière d invoquer la méthode par HTTP GET/POST et SOAP. Il est aussi possible d invoquer directement la méthode à partir de cette page. La fonction prenant en argument une chaîne de caractères, il est possible de la saisir. Dans notre cas j ai saisi «olivier». On obtient alors le résultat suivant dans le navigateur : <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://oliviersxp.fr/webservices/">olivier, Bonjour le monde! :)</string> http://localhost/webservice1/service1.asmx?wsdl Ce lien affiche le contrat «XML Web Service Description Language». Ce fichier XML décrit l ensemble des méthodes, paramètres et types de données du Service Web (c est l équivalent d une librairie de type (terme US : Type Library) d un objet COM). Ce document est considéré comme un contrat liant le client et le serveur. Remarque : Les pages HTML visibles par les URL précédentes, sont générées par le gestionnaire XML des Services Web (XML Web Services Handler). Les requêtes sur les fichiers *.asmx sont automatiquement gérées par une classe spécifique HTTPHandler : System.Web.Services.Protocols.WebServiceHandlerFactory Les handlers sont en quelques sortes l équivalent des filtres ISAPI. Ils gèrent le traitement d URL HTTP ou de groupes d extensions d URL dans une application. Un seul handler est utilisé pour traiter une requête. Les deux principaux handlers fournis avec le.net Framework sont : ASP.NET page handler : destiné à traiter toutes les pages aspx (ASP.NET Page Framework). ASP.NET Service handler : utilisé pour traiter toutes les pages asmx. Les modèles de ces pages sont basés sur une application de type formulaire Web (WebForm) que l on peut trouver dans le répertoire suivant : \%WINDOWS% \Microsoft.NET \Framework \[version] \CONFIG \DefaultWsdlHelpGenerator.aspx Ce fichier est personnalisable et peut être adapté à vos besoins. 4.2 Types des données Une méthode Web peut utiliser des types de données en paramètres et en valeurs de retour, plus complexes qu un simple entier ou une chaîne de caractères. Néanmoins les types de données supportés dépendent surtout du protocole. Contrairement à SOAP, tous les types ne peuvent pas être utilisés par HTTP GET/POST. Ensemble des types de données supportés par SOAP : Types de base : String, Char, Boolean, Int16, Int32, Enum : public enum color {red=1,blue=2} Tableaux de types de base et d enum Classes et structures Tableaux de classes

11/28 DataSet et Tableau de DataSet XmlNode et Tableau d XmlNodes Valeurs de retour Tous ces types sont supportés en valeur de retour quel que soit le protocole. Paramètres SOAP supporte le passage de tous les types ainsi que les passages «byval» et «byref» en entrée ou sortie (in/out). HTTP GET/POST ne supporte que les passages de paramètres «byval» et uniquement les types suivants : Types de base : String, Char, Boolean, Int16, Int32, Enum : public enum color {red=1,blue=2} Tableaux de types de base et d enum Remarque : le marshalling des classes et structures en tant qu argument ou résultat est réalisé en sérialisant toutes les propriétés et zones publiques de la classe en XML, puis envoi de l XML. Il est important de noter que seulement les données publiques font l objet de ce marshalling. 4.3 Exemples de transferts de données (marshalling) 4.3.1 Méthode Web retournant une structure /// <summary> /// Web Method qui retourne une structure /// </summary> public struct Condition { public int BuildingNumber; public string BuildingCondition; public string Grass; } [WebMethod] public Condition BuildingRating(int blnum) { Condition bldinfo = new Condition(); switch(blnum) { case 1: bldinfo.buildingnumber = 1; bldinfo.buildingcondition = "Getting old"; bldinfo.grass = "Need Mowing"; break; case 2: bldinfo.buildingnumber = 2; bldinfo.buildingcondition = "Brand Spanking New"; bldinfo.grass = "Sweet Kentucky Bluegrass"; break; } return bldinfo; } Résultat XML de la structure retournée par la méthode ci-dessus (via SOAP) : <?xml version="1.0" encoding="utf-8"?>

12/28 <Condition xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://oliviersxp.fr/webservices/"> <BuildingNumber>1</BuildingNumber> <BuildingCondition>Getting old</buildingcondition> <Grass>Need Mowing</Grass> </Condition> 4.3.2 Méthode Web retournant un tableau [WebMethod] public string[] GetSuperHeros() { string[] Members = new string[5]; Members[0] = "Toto"; Members[1] = "Popey"; Members[2] = "Inspecteur gadget"; Members[3] = "Babar"; Members[4] = "Beetlejuce"; } return Members; Résultat XML de la structure retournée par la méthode ci-dessus (via HTTP) : <?xml version="1.0" encoding="utf-8"?> <ArrayOfString xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://oliviersxp.fr/webservices/"> <string>toto</string> <string>popey</string> <string>inspecteur gadget</string> <string>babar</string> <string>beetlejuce</string> </ArrayOfString> 5 Tester et déboguer un Service Web Afin de déboguer le service Web, il est possible de placer des points d arrêt dans le code. Lorsque la méthode est invoquée, l exécution s arrête sur le point d arrêt. Nous pouvons poursuivre l exécution du code en pas à pas par F10 ou F11 comme nous le ferions pour une application classique. On peut configurer le mode debug directement depuis l interface :

13/28 Ou en passant par les propriétés du projet : Le déboguage d un Service Web étant similaire à un déboguage d une application.net classique, on consultera l aide en ligne pour tout complément d informations, plus précisément le chapitre «Déboguage des Services Web XML en code managé» 6 Déployer un service Web Pour transférer un projet d un serveur de développement vers un serveur de production, deux possibilités sont offertes : Copier les fichiers du projet (copier le projet sur le serveur destination) 1. Sélectionner le projet 2. Cliquer sur le menu «Projet», puis «Copier un projet». 3. Indiquer la destination. Créer un projet d installation 1. Pour cela ajouter un Projet à la solution depuis le menu Fichier / Ajouter Projet 2. Sélectionner «Projet de configuration et de déploiement» puis «Projet de configuration Web». Par défaut ce nouveau projet s appelle WebSetup1. 3. Cliquer sur le bouton OK 4. Cliquer avec le bouton droit sur WebSetup1, sélectionner «Ajouter» puis «Sorties du projet». 5. Sélectionner le contenu de l installation comme ci-dessous et cliquer sur «OK»

14/28 Dans «Description» et dans le cas d un choix individuel, vous pouvez voir à quoi correspond cette sélection : Sortie principale : correspond à la dll du projet et ses dépendances. Symboles de débogage : fichier PDB du projet. Content Files : fichiers XML du projet (.asmx,.asax,.config) 6. Cliquer sur la solution, puis «Générer». Le résultat se trouve dans le répertoire du projet de configuration et de déploiement créé en 2. Le sous répertoire contient les fichiers suivants : Setup.exe : teste la présence de Windows Installer sur le poste cible. Si Windows Installer n est pas présent, setup.exe lance son installation. Après ce contrôle, on procède réellement à l installation du service Web par le fichier.msi. InstMsiA.exe et InstMsiW.exe : redistribuables de Windows Installer pour les processeurs Alpha ou Intel. Ces deux programmes permettent d installer Windows Installer sur la machine cible. WebSetup1.msi : fichier exploité par Windows Installer pour installer le service Web. Rappel sur Windows Installer : c est un service Windows qui procède à l installation d applications en exploitant le contenu des fichiers.msi. Ces fichiers décrivent en détail toutes les opérations à réaliser pour installer le produit, et contiennent les fichiers de l application. Par la suite on peut modifier le type de fichier.msi en utilisant les propriétés du projet WebSetup1

15/28 6.1 Installation du package.msi sur le serveur Web 1. Partager le répertoire où se trouve les fichiers WebSetup1.msi et Setup.exe (nom de partage pour cet exemple : ShareMSI). 2. A partir du serveur cible, se connecter sur le répertoire partagé et lancer setup.exe : \\ServeurDEV\ShareMSI\setup.exe 3. Suivre l assistant d installation Remarque : Après l installation, on trouve les fichiers suivants dans le répertoire virtuel du serveur cible : Global.asax Service1.asmx Web.config 7 Création d un client.net Pour appeler un Service Web depuis un client il faut générer un proxy. Ce proxy va servir au marshalling, c'est-à-dire à l échange des données entre le serveur et le client. Ce mécanisme n a rien de nouveau et existait déjà dans le monde de COM/DCOM. Avec Visual Studio.NET il existe deux méthodes pour créer le proxy, l une est automatique et l autre est manuelle. 7.1 Création de proxies pour les clients 7.1.1 Création depuis l interface de Visual Studio.NET 1. Créer une nouvelle solution de type «Application Windows» 2. Cliquer sur Projet/Ajouter une référence Web 3. Saisir l URL du fichier asmx : http://localhost/webservice1/service1.asmx

16/28 4. Cliquer sur «Ajouter la référence» 7.1.2 Création manuelle du proxy grâce à l'outil wsdl.exe L outil WSDL.EXE fourni avec le.net Framework permet de générer une DLL proxy a partir du contrat WSDL. Pour notre Service Web, on procèderait de la manière suivante pour générer la DLL : - ouvrir Visual Studio.NET Command Prompt (Menu démarrer/programmes/microsoft Visual Studio.NET/Visual Studio.NET Tools) - créer un sous répertoire dans le répertoire du projet. Celui-ci servira à sauvegarder le proxy. - Saisir la ligne de commande suivante : E:\Visual Studio Projects\WebService1\ProxyDLL>wsdl http://oliviersxp/webservice1/service1.asmx?wsdl /language:cs /out:mywebservce1proxy.cs - Résultat Microsoft (R) Web Services Description Language Utility [Microsoft (R).NET Framework, Version 1.0.3705.0] Copyright (C) Microsoft Corporation 1998-2001. All rights reserved. Writing file 'MyWebServce1Proxy.cs'. - Compiler le code source généré : E:\Visual Studio Projects\WebService1\ProxyDLL>csc /t:library MyWebServce1Proxy. cs Microsoft (R) Visual C#.NET Compiler version 7.00.9466 for Microsoft (R).NET Framework version 1.0.3705

17/28 Copyright (C) Microsoft Corporation 2001. All rights reserved. Plus d informations sont disponibles à ce sujet à l adresse suivante : http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconcreatingwebserviceproxy.asp 7.2 Client Web Forms 1. Créer un nouveau projet du type «Application Web ASP.NET» avec le nom : http://localhost/webserviceclient1 2. Ajouter au projet une référence vers le Service Web : On a vu précédemment comment ajouter une référence web mais on peut également référencer l assembly créée avec l outil WSDL.EXE On remarque dans l explorateur de projet l apparition de la référence web : et dans le cas du référencement de l assembly proxy :

18/28 3. Placer 2 contrôles étiquettes (labels), un bouton et un champ d édition (Textbox) comme suit : 4. Ajouter le code suivant sur l événement Click du bouton (il suffit de double cliquer sur le bouton): Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim WSclient As New localhost.service1() Label1.Text = WSclient.HelloWorld(TextBox1.Text.ToString()) Libérer les ressources WSclient.Dispose() End Sub 5. Compiler puis afficher la page dans le navigateur. 6. Saisir une chaîne de caractère dans le champ d édition. 7. Cliquer sur le bouton «Button». 8. L étiquette résultat contient le résultat de la méthode HelloWorld de notre Service Web. 7.3 Client Windows Forms La façon de procéder est identique au client basé sur le Web mais il suffit de créer un projet de type Formulaires Windows (terme US : Windows Forms). 8 Création d'un client VB6 La création et l exploitation des Services Web sont intégrées dans le.net Framework. Il faut installer une couche intermédiaire appelée SOAP Toolkit pour en bénéficier avec Visual Basic 6. Nous allons voir la procédure à suivre pour exploiter notre Service Web depuis VB6. 8.1 SOAP Toolkit

19/28 8.1.1 Que faut-il pour l installer? Plateformes supportées : Les objets client SOAP s exécutent depuis Microsoft Windows 98, Microsoft Windows ME, Microsoft Windows NT 4.0 Service Pack 6, Microsoft Windows 2000 Service Pack 1, Windows XP et plus. Les objets serveur SOAP s exécutent soit en utilisant des filtres Internet Server API (ISAPI) soit depuis des pages ASP depuis Windows 2000 et Windows NT 4.0 Service Pack 6, Windows XP et plus Remarques : Au moins Microsoft Internet Explorer 5.0 est requis. L installation de SOAP Toolkit 2.0 procède également à l installation du parseur XML Microsoft XML Parser (MSXML 3.0). Le client SOAP Messaging Objects (SMO) requiert la runtime Visual Basic (Microsoft Visual Basic runtime). Cette runtime doit être installée sur les postes installés en Windows NT 4.0, Windows 98, ou Windows Me. Les extensions ISAPI (soapisap.dll) requièrent la présence de Microsoft Internet Information Services (IIS) 4.0 sur Windows NT 4.0, IIS 5.0 sur Windows 2000 et IIS 5.1 sur Windows XP 8.1.2 Où le télécharger? SOAP Toolkit 2.0 SP2 est disponible en téléchargement depuis le site de la MSDN à l adresse suivante : http://msdn.microsoft.com/downloads/default.asp?url=/code/sample.asp?url=/msdnfiles/027/001/580/msdncompositedoc.xml La version 2.0 SP2 est la dernière en date à ce jour et supporte les spécifications WSDL (Web Service Description Language) 1.1. 8.2 Exemple VB6 avec SOAPToolkit Voici un schéma qui décrit le fonctionnement de l objet SoapClient. Cet objet fait la transition entre le monde COM de Visual Basic 6 et le monde des Services Web XML apportés avec la technologie.net : Flux des données côté client Etape 1 Etape 2 Appel à HelloWorld ( Olivier ) R= Olivier, Bonjour le monde! :) Objet SoapClient Requête SOAP au serveur Réponse SOAP du serveur Etape 4 Etape 3 Les étapes suivantes permettent de créer un exemple de client VB6 SP5 en utilisant le SOAP Toolkit :

20/28 1. Charger Visual Basic et crée un projet EXE Standard 2. Dans le menu projet / références ajouter une référence a Microsoft Soap Type Library 3. Sur le formulaire, ajouter un champ édition ainsi qu un bouton de commande 4. Coller le code suivant dans l événement Click du bouton Private Sub Command1_Click() Dim arg As String arg = "Olivier" Dim WSClient As MSSOAPLib.SoapClient Set WSClient = New MSSOAPLib.SoapClient Récupère le contrat du WebService et créé un Proxy WSClient.mssoapinit _ "http://oliviersxp/webservice1/service1.asmx?wsdl", _ "Service1", "" Appel de la méthode HelloWorld du Service Web Text1.Text = WSClient.HelloWorld(arg) End Sub 5. Exécuter le projet et cliquer sur le bouton, le résultat de la méthode HelloWorld s affiche alors dans le champ d édition. 9 Analyse des messages transitant sur le réseau Avec l outil Network Monitor (Netmon) nous allons observer l échange entre le client (VB6) et le serveur et analyser les messages SOAP qui circulent. Une description plus détaillée de SOAP est disponible en Annexe A de ce document. Nous allons donc nous intéresser aux deux méthodes appelées sur l objet WSClient : WSClient.mssoapinit WSClient.HelloWorld

21/28 9.1 WSClient.mssoapinit WSClient.mssoapinit _ "http://oliviersxp/webservice1/service1.asmx?wsdl", _ "Service1", "" Requête HTTP correspondante : GET /WebService1/Service1.asmx?wsdl HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; T312461) Host: oliviersxp Connection: Keep-Alive Réponse du serveur Web : HTTP/1.1 200 OK Server: Microsoft-IIS/5.1 Date: Wed, 24 Apr 2002 12:22:58 GMT Transfer-Encoding: chunked Cache-Control: private, max-age=0 Content-Type: text/xml; charset=utf-8 <?xml version="1.0" encoding="utf-8"?> <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/xmlschema" xmlns:s0="http://tempuri.org/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textmatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetnamespace="http://tempuri.org/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <s:schema elementformdefault="qualified" targetnamespace="http://tempuri.org/"> <s:element name="helloworld"> <s:complextype> <s:sequence> <s:element minoccurs="0" maxoccurs="1" name="user" type="s:string" /> </s:sequence> </s:complextype> </s:element> <s:element name="helloworldresponse"> <s:complextype> <s:sequence> <s:element minoccurs="0" maxoccurs="1" name="helloworldresult" type="s:string" /> </s:sequence> </s:complextype> </s:element> <s:element name="string" nillable="true" type="s:string" /> </s:schema> </types> <message name="helloworldsoapin"> <part name="parameters" element="s0:helloworld" /> </message> <message name="helloworldsoapout"> <part name="parameters" element="s0:helloworldresponse" /> </message> <message name="helloworldhttpgetin"> <part name="user" type="s:string" /> </message>

22/28 <message name="helloworldhttpgetout"> <part name="body" element="s0:string" /> </message> <message name="helloworldhttppostin"> <part name="user" type="s:string" /> </message> <message name="helloworldhttppostout"> <part name="body" element="s0:string" /> </message> <porttype name="service1soap"> <operation name="helloworld"> <input message="s0:helloworldsoapin" /> <output message="s0:helloworldsoapout" /> </operation> </porttype> <porttype name="service1httpget"> <operation name="helloworld"> <input message="s0:helloworldhttpgetin" /> <output message="s0:helloworldhttpgetout" /> </operation> </porttype> <porttype name="service1httppost"> <operation name="helloworld"> <input message="s0:helloworldhttppostin" /> <output message="s0:helloworldhttppostout" /> </operation> </porttype> <binding name="service1soap" type="s0:service1soap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <operation name="helloworld"> <soap:operation soapaction="http://tempuri.org/helloworld" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <binding name="service1httpget" type="s0:service1httpget"> <http:binding verb="get" /> <operation name="helloworld"> <http:operation location="/helloworld" /> <input> <http:urlencoded /> </input> <output> <mime:mimexml part="body" /> </output> </operation> </binding> <binding name="service1httppost" type="s0:service1httppost"> <http:binding verb="post" /> <operation name="helloworld"> <http:operation location="/helloworld" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimexml part="body" />