Webservice : Appel depuis un programme
Le Web Service peut être ajouté en référence à un programme C# ou VB.NET.
Le WSDL est disponible à l'adresse : http://localhost/service/Service.asmx?wsdl. (Dans un projet Visual Studio, faire clic droit > Ajouter une référence de service ...).
La classe « proxy » créée pour appeler le web service (MustangOxy.OxService) ne sait pas gérer les Cookies lors de l’appel au web Service. Hors nous avons besoin des cookies pour maintenir la session d’authentification avec le Web service.
Pour contourner le problème, nous créons une classe OxProxy qui dérive de OxService.
Le constructeur de la classe s’occupe de mettre en place le support des cookies.
OxProxy.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Xml;
using System.Net;
/// <summary>
/// Summary description for OxProxy
/// </summary>
public class OxProxy : MustangOxy.OxService
{
public static readonly String COOKIE_JAR_SESSION_NAME = "CookieJar";
public OxProxy()
{
A_Debut();
}
protected void A_Debut()
{
//Place le cookie de session pour l'appel du service
CookieContainercookieJar;
cookieJar = (HttpContext.Current.Session[COOKIE_JAR_SESSION_NAME] as CookieContainer) ?? new CookieContainer();
base.CookieContainer = cookieJar;
}
//A appeler lorsque la requête HTTP n'a plus besoin du service.
public void A_Fin()
{
//Met à jour les cookies
HttpContext.Current.Session[COOKIE_JAR_SESSION_NAME] = base.CookieContainer;
}
//fonction utilitaire
public static DataSet ConvertToDataSet(XmlNode oxRep)
{
XmlReader rdr = new XmlNodeReader(oxRep);
DataSet s = new DataSet();
s.ReadXml(rdr, XmlReadMode.ReadSchema);
return s;
}
}
Ensuite nous utilisons la classe comme suit :OxProxy oxServ = new OxProxy();
oxRet = oxServ.Login(code, motDePasse, dossier);
oxServ.A_Fin();
Autre exemple avec ConvertToDataSet :OxProxy oxServ = new OxProxy();
DataSet s = OxProxy.ConvertToDataSet(oxServ.GetTable("GESAFF", "AFSOCI", ""));