Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

18 mars 2007 7 18 /03 /mars /2007 01:16
Services Web
I Les services webs (modèle RPC – requête / réponse synchrone)
Côté service
1 – nomserviceweb.asmx
Décrit :
-          Le language de programmation utilisé
-          Le chemin vers le fichier *.cs
-          Le nom de la classe
<%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" Class="Service" %>
 
2 – nomclasse.cs (dans le dossier App_code pour .NET 2.0)
-          La classe hérite de  System.Web.Services.WebService (mais pas obligatoirement)
-          La classe a une portée public + un constructeur par défaut également en public
-          Toutes les webmethods ont un attribut : [WebMethod] ou [System.Web.Services.WebMethod()]
-          Le namespace du service web est [WebService(Namespace = "http://tempuri.org/")] par défaut , mais on peut renommer ex : [WebService(Namespace = "http://nomservice.com/")]
-            On peut être amené à utiliser les attributs Xml   ex : [System.Xml.Serialization.XmlRoot(Namespace = "http://tempuri.org/BObject.CONTACT")]
 
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
 
// 1 le namespace du webservice
// 2 la classe hérite de System.Web.Services.WebService + portée public
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    // 3 le constructeur par défaut public
    public Service ()
    {
    }
 
    // 4 les web methods précédées par l'attribut [webmethod]
    [System.Web.Services.WebMethod()]
    public string WebMethod1()
    {
        Return « »;
    }
    [System.Web.Services.WebMethod()]
    public string WebMethod2()
    {
        Return « »;
    }
 
}
 
 
>> Tester le service web il suffit de saisir dans le navigateur l’addresse du service web*.asmx (ex : http://localhost:3896/MyContacts.Service/Service.asmx) [le serveur de développeent ou IIS doit bien entendu etre lancé]
Il suffit alors de choisir la webmethod du service web que l’on désire tester – on arrive alors à une page qui permet de tester celle-ci avec des champs de saisies si besoin
>> on peut également accéder au contrat wsdl en rajoutant ?wsdl à la fin de l’addresse du service *.asmx (ex : http://localhost:3896/MyContacts.Service/Service.asmx?WSDL)
 
Exemple de page html générée qui sera renvoyée vers le client ( on a tout simplement une collection de contacts chargée depuis une base de données qui est renvoyée ,chaque contact a un nom [contactName], prenom [ContactFirstName]et email [ContactEmail])
<?xmlversion="1.0"encoding="utf-8" ?>
<CONTACTxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns="http://tempuri.org/Ctrl.CONTACT">
 <BObjectCONTACTs>
    <CONTACT>
      <ContactNamexmlns="http://tempuri.org/BObject.CONTACT">Bellin</ContactName>
      <Original_ContactNamexmlns="http://tempuri.org/BObject.CONTACT">Bellin</Original_ContactName>
      <ContactFirstNamexmlns="http://tempuri.org/BObject.CONTACT">Marie</ContactFirstName>
      <Original_ContactFirstNamexmlns="http://tempuri.org/BObject.CONTACT">Marie</Original_ContactFirstName>
      <ContactEmailxmlns="http://tempuri.org/BObject.CONTACT">mb3@laposte.net</ContactEmail>
      <Original_ContactEmailxmlns="http://tempuri.org/BObject.CONTACT">mb3@laposte.net</Original_ContactEmail>
      <ContactIDxmlns="http://tempuri.org/BObject.CONTACT">1</ContactID>
      <RowStatexmlns="http://tempuri.org/BObject.CONTACT">Unchanged</RowState>
      <RowErrorxmlns="http://tempuri.org/BObject.CONTACT" />
    </CONTACT>
    <CONTACT>
      <ContactNamexmlns="http://tempuri.org/BObject.CONTACT">Romagny</ContactName>
      <Original_ContactNamexmlns="http://tempuri.org/BObject.CONTACT">Romagny</Original_ContactName>
      <ContactFirstNamexmlns="http://tempuri.org/BObject.CONTACT">Jérôme</ContactFirstName>
      <Original_ContactFirstNamexmlns="http://tempuri.org/BObject.CONTACT">Jérôme</Original_ContactFirstName>
      <ContactEmailxmlns="http://tempuri.org/BObject.CONTACT">romagny13@yahoo.fr</ContactEmail>
      <Original_ContactEmailxmlns="http://tempuri.org/BObject.CONTACT">romagny13@yahoo.fr</Original_ContactEmail>
      <ContactIDxmlns="http://tempuri.org/BObject.CONTACT">2</ContactID>
      <RowStatexmlns="http://tempuri.org/BObject.CONTACT">Unchanged</RowState>
      <RowErrorxmlns="http://tempuri.org/BObject.CONTACT" />
    </CONTACT>
 </BObjectCONTACTs>
 <BDataCONTACT />
</CONTACT>
 
Côté client
Le client va s’interfacer avec le service web grâce à une classe proxy
-          générée de manière transparente par Visual Studio par l’intermédiaire de l’utilitaire du SDK wsdl.exe
il faut ajouter une référence web > saisir l’addresse du service web *.asmx (ex : http://localhost:3896/MyContacts.Service/Service.asmx) > ajouter la référence
-          on peut donc également très facilement générer pour un service web la classe proxy avec cet utilitaire http://msdn2.microsoft.com/fr-fr/library/7h3ystb6(VS.80).aspx
 
Ex : (depuis une invite de commande   : menu demarrer > executer >cmd)
Cd « C:Program FilesMicrosoft Visual Studio 8SDKv2.0Bin”
Wsdl.exe
 
Code généré (dans le répertoire du SDK) > service.cs
On remarque que la classe proxy comporte des méthodes de chargement asynchrone qui ont été ajoutées (le service web n’avait pas ces methodes à la base 

Partager cet article

Repost 0
Published by Romagny13 - dans C 1.0- 2.0- 3.0
commenter cet article

commentaires