Services Web en C#

L'avantage d'un service Web est qu'il est totalement indépendant du langage utilisé par le consommateur du service.

Nous verrons comment consommer un service Web en C# page suivante, mais penchons nous ici sur la création d'un service Web en C#.

WebService Hello World

Pour notre premier service Web, nous allons créer une méthode qui retourne la célèbre chaine de caractères "Hello World".

Si nous possédons un serveur Web IIS, il nous suffit de placer un simple fichier texte dans le répertoire du site (par défaut C:\inetpub\wwwroot). Ce fichier doit comporter l'extension .asmx, et doit commencer par la directive suivante :


Code c# (HelloService) (1 ligne) :
  1. <%@ WebService Language="C#" Class="HelloService" %>

Nous devons maintenant mettre à disposition une méthode que nous pouvons invoquer au travers de notre service Web. La méthode n'a rien de particulier en elle même, mais nous allons l'annoter avec l'attribut WebMethod pour signaler qu'elle est exposée, et que le compilateur devra effectuer le traitement nécessaire pour permettre son accès au travers du service. Nous pouvons sauver le fichier sous hello.asmx.


Code c# (hello.asmx) (10 lignes) :
  1. <%@ WebService Language="C#" Class="HelloService" %>
  2. using System.Web.Services;
  3. public class HelloService&nbsp;: System.Web.Services.WebService
  4. {
  5. [WebMethod(Description = "Our first WebService, returns hello world")]
  6. public string sayHello()
  7. {
  8. return "Hello World";
  9. }
  10. }

Si nous ouvrons notre navigateur et que nous demandons le fichier localhost\hello.asmx, une page nous présente les méthodes accessibles. Comme nous avons spécifié une description, celle ci est affichée.

Pour que nous puissions utiliser l'attribut WebMethod et pour que notre classe puisse dériver de WebService, nous ne devons pas oublier d'indiquer que nous utilisons l'assembly System.Web.Services.

Si nous ne possédons pas de serveur IIS, Visual Studio nous permet quand même de tester notre service en démarrant un serveur de développement. Attention que nous n'utilisons plus le port par défaut (80) et qu'il faut dès lors spécifier le port dans l'adresse (par exemple http://localhost:1859/WebServices/hello.asmx).

Si nous développons notre service Web avec Visual Studio, ce dernier crée un fichier asmx presque vide, qui réfère une classe traditionnelle. Pour créer le site Web sous Visual Studio 2005, nous devons sélectionner Fichier, puis nouveau, et enfin SiteWeb.

Nous pouvons à présent sélectionner dans la fenêtre la proposition "Service Web ASP.Net". Visual Studio 2005 génère la structure pour nous.


Code c# (hello.asmx selon Visual Studio) (1 ligne) :
  1. <%@ WebService Language="C#" CodeBehind="~/App_Code/HelloService.cs" Class="HelloService" %>

Le code dans la classe est le même que celui de l'exemple précédent, à part que nous spécifions un espace de noms. Nous pouvons placer n'importe quelle chaîne de caractères (par exemple "BrolDev.WebServices.Hello"), Visual Studio quand à lui spécifie un nom sous forme d'URL.Ce qui importe, c'est de rendre unique le code du service.


Code c# (HelloService.cs) (10 lignes) :
  1. using System.Web.Services;
  2. [WebService(Namespace = "http://localhost/tests")]
  3. public class HelloService&nbsp;: System.Web.Services.WebService
  4. {
  5. [WebMethod(Description = "Our first WebService, returns hello world")]
  6. public string sayHello()
  7. {
  8. return "Hello World";
  9. }
  10. }

WebService BiblioBrol

Pour notre exemple, nous allons travailler avec l'application BiblioBrol. Une distinction est faite dès le départ entre la vue et le modèle, et ceci va nous simplifier la vie.
Nous allons générer une dll avec le code du modèle. De cette manière, l'application BiblioBrol peut utiliser cette dll, mais nous pouvons aussi l'utiliser sur un serveur Web.

Il nous suffit alors de réaliser une classe qui pourra utiliser les méthodes de notre dll, et les exposer aux consommateurs.

Exemple

  1. using System;
  2. using System.Web;
  3. using System.Web.Services;
  4. using System.Web.Services.Protocols;
  5. using BiblioBrol.Model;
  6. using BiblioBrol.Observer;
  7. [WebService(Namespace = "http://localhost/bibliobrol")]
  8. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  9. public class BibliobrolService&nbsp;: System.Web.Services.WebService
  10. {
  11. public BibliobrolService ()
  12. {
  13. }
  14. [WebMethod(Description = "Get current BiblioBrol getVersion")]
  15. public string getVersion()
  16. {
  17. return "1.0.0.6";
  18. }
  19. [WebMethod(Description = "Returns a Person object matches with this id. Throws SoapException in case of errors or person not found")]
  20. public BiblioBrol.Model.Person getPerson(int pId)
  21. {
  22. testConfig();
  23. BiblioBrol.Model.Person p = ModelAdapter.getPerson(pId, false);
  24. if(p.Id<0)
  25. {
  26. throw new SoapException("Impossible de trouver la personne avec un id = "+pId, new System.Xml.XmlQualifiedName("notExists"));
  27. }
  28. return p;
  29. }
  30. [WebMethod(Description = "Returns a List of Person objects matches with this lastName. Throws SoapException in case of errors")]
  31. public System.Collections.Generic.List<BiblioBrol.Model.Person> getPersonsByLastName(String lastName)
  32. {
  33. testConfig();
  34. System.Collections.Generic.List<BiblioBrol.Model.Person> persons = ModelAdapter.getPersons(lastName);
  35. return persons;
  36. }
  37. [WebMethod(Description = "Returns a List of ActorRole objects matches with this person. Throws SoapException in case of errors")]
  38. public System.Collections.Generic.List<BiblioBrol.Model.ActorRole> getRoleByPerson(Person person)
  39. {
  40. testConfig();
  41. System.Collections.Generic.List<BiblioBrol.Model.ActorRole> roles = ModelAdapter.getRoles(person);
  42. return roles;
  43. }
  44. private void testConfig()
  45. {
  46. if(!ModelAdapter.isAvailablePersistence())
  47. {
  48. throw new SoapException("No persistence system found.", new System.Xml.XmlQualifiedName("PersNotFound"));
  49. }
  50. }
  51. }

Un problème subsiste : notre modèle avait un fichier de configuration (App.config, qui était ensuite transformé en BiblioBrol.exe.config) dans lequel nous avions déterminé certaines valeurs. Nous ne pouvons plus utiliser ce fichier mais un fichier web.config.

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  3. <appSettings>
  4. <add key="useDB" value="Access" />
  5. <!-- SQLExpressSourceDB parameters -->
  6. <!--add key="SQLExpressSourceDB" value="Data Source=.\SQLEXPRESS;Initial Catalog=mediaBrol;Integrated Security=True;Pooling=False"/-->
  7. <add key="SQLE_DS" value=".\SQLEXPRESS" />
  8. <add key="SQLE_IC" value="bibliobrolDB" />
  9. <add key="SQLE_IS" value="True" />
  10. <add key="SQLE_P" value="False" />
  11. <!-- AccessDB parameters -->
  12. <add key="AccessSourceDB" value="D:\Dev\bibliobrol\WebService\App_Data\webdata.bdb" />
  13. <add key="pathDB" value="" />
  14. <!-- Storage directories parameters -->
  15. <add key="applicationImgPath" value="App_Data\appl_img" />
  16. <add key="persImgPath" value="App_Data\persons_img" />
  17. <add key="mediaImgPath" value="App_Data\bibliobrol_img" />
  18. </appSettings>
  19. </configuration>

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

6 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-11822
Document créé le 04/06/07 02:29, dernière modification le Mercredi 28 Juin 2017, 15:26
Source du document imprimé : http:///www.gaudry.be/csharp-webservice.html
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Apparence (afficher)
Stats (afficher)
15838 documents
455 astuces.
550 niouzes.
3107 definitions.
447 membres.
8121 messages.

Document genere en :
0,13 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
En ce monde rien n'est certain, à part la mort et les impôts.

Benjamin Franklin
 
l'infobrol
Nous sommes le Vendredi 21 Juillet 2017, 06:38, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)