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)
<%@ 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)
<%@ WebService Language="C#" Class="HelloService" %> using System.Web.Services; public class HelloService : System.Web.Services.WebService { [WebMethod(Description = "Our first WebService, returns hello world")] public string sayHello() { return "Hello World"; } }
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)
<%@ 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)
using System.Web.Services; [WebService(Namespace = "http://localhost/tests")] public class HelloService : System.Web.Services.WebService { [WebMethod(Description = "Our first WebService, returns hello world")] public string sayHello() { return "Hello World"; } }
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 de WebService en C#
Code c# (BibliobrolService.cs) (51 lignes)
using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using BiblioBrol.Model; using BiblioBrol.Observer; [WebService(Namespace = "http://localhost/bibliobrol")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class BibliobrolService : System.Web.Services.WebService { public BibliobrolService () { } [WebMethod(Description = "Get current BiblioBrol getVersion")] public string getVersion() { return "1.0.0.6"; } [WebMethod(Description = "Returns a Person object matches with this id. Throws SoapException in case of errors or person not found")] public BiblioBrol.Model.Person getPerson(int pId) { testConfig(); BiblioBrol.Model.Person p = ModelAdapter.getPerson(pId, false); if(p.Id<0) { } return p; } [WebMethod(Description = "Returns a List of Person objects matches with this lastName. Throws SoapException in case of errors")] public System.Collections.Generic.List<BiblioBrol.Model.Person> getPersonsByLastName(String lastName) { testConfig(); System.Collections.Generic.List<BiblioBrol.Model.Person> persons = ModelAdapter.getPersons(lastName); return persons; } [WebMethod(Description = "Returns a List of ActorRole objects matches with this person. Throws SoapException in case of errors")] public System.Collections.Generic.List<BiblioBrol.Model.ActorRole> getRoleByPerson(Person person) { testConfig(); System.Collections.Generic.List<BiblioBrol.Model.ActorRole> roles = ModelAdapter.getRoles(person); return roles; } private void testConfig() { if(!ModelAdapter.isAvailablePersistence()) { } } }
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.
Code XML (web.config) (21 lignes)
<?xml version="1.0" encoding="utf-8" // ?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <appSettings> <add key="useDB" value="Access" /> <!-- SQLExpressSourceDB parameters --> <!--add key="SQLExpressSourceDB" value="Data Source=.\SQLEXPRESS;Initial Catalog=mediaBrol;Integrated Security=True;Pooling=False"/--> <add key="SQLE_DS" value=".\SQLEXPRESS" /> <add key="SQLE_IC" value="bibliobrolDB" /> <add key="SQLE_IS" value="True" /> <add key="SQLE_P" value="False" /> <!-- AccessDB parameters --> <add key="AccessSourceDB" value="D:\Dev\bibliobrol\WebService\App_Data\webdata.bdb" /> <add key="pathDB" value="" /> <!-- Storage directories parameters --> <add key="applicationImgPath" value="App_Data\appl_img" /> <add key="persImgPath" value="App_Data\persons_img" /> <add key="mediaImgPath" value="App_Data\bibliobrol_img" /> </appSettings> </configuration>
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 04/06/2007, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/csharp-webservice.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.