IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

Problème avec un client SOAP


Sujet :

Services Web

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Problème avec un client SOAP
    Bonjour à tous, je poste ici car j'ai un problème avec l'utilisation d'un web service. Je vous explique, le web service en question est très simple: Operations.asmx

    <%@ webService Language=C# class=Operations %>

    using System.Web.Services;

    public class Operations: WebService{

    [WebMethod]
    public double ajouter(double a, double b){
    return a+b;
    }

    [WebMethod]
    public double soustraire(double a, double b){
    return a-b;
    }

    }


    Ce fichier est placé dans le répertoire wwwroot. Aucun problème pour utiliser ce service en local en se connectant à http://localhost/Operations.asmx mais lorsque je développe un client SOAP sensé envoyer au serveur IIS les lignes de commandes qui conviennent (recopiées d'un tutorial), j'obtiens un message d'erreur 500 Internal Server Error, je vous copie ici le code de mon client (limité aux lignes envoyées au serveur IIS):

    // construction de la chaîne de requête SOAP (2eme methode)
    string[] reqSOAP = new string[10];
    reqSOAP[0] = "<?xml version=" + "\"1.0\" encoding=\"utf-8\"?>";
    reqSOAP[1] = "<soap:Envelope xmlnssi=\"http://www.w3.org/2001/XMLSchema-instance\"xmlnssd=\"http://www.w3.org/2001/XMLSchema\"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
    reqSOAP[2] = "<soap:Body>";
    reqSOAP[3] = "<" + fonction + " xmlns=\"http://tempuri.org/\">";
    reqSOAP[4] = "<a>" + a + "</a>";
    reqSOAP[5] = "<b>" + b + "</b>";
    reqSOAP[6] = "</" + fonction + ">";
    reqSOAP[7] = "</soap:Body>";
    reqSOAP[8] = "</soap:Envelope>";
    reqSOAP[9] = "";

    int nbCharsSOAP = 0;

    for (int i = 0; i < 10; i++) {
    nbCharsSOAP += reqSOAP[i].Length;
    Console.WriteLine("longueur " + i + ": "+ nbCharsSOAP);
    }


    // construction du tableau des entêtes HTTP à envoyer
    string[] entetes=new string[6];
    entetes[0]="POST " + "/Operations.asmx"+" HTTP/1.1";
    entetes[1] = "Host: " + host; // +":" + uri.Port;
    entetes[2]="Content-Type: text/xml; charset=utf-8";
    entetes[3]="Content-Length: "+nbCharsSOAP;
    entetes[4] = "SOAPAction: \"http://tempuri.org/" + fonction + "\"";
    entetes[5]="";
    // on envoie les entêtes HTTP au serveur
    for(int i=0;i<entetes.Length;i++){
    // envoi au serveur
    OUT.WriteLine(entetes[i]);
    // écho écran
    Console.Out.WriteLine("--> "+entetes[i]);
    }//for

    // on lit la 1ere réponse du serveur Web HTTP/1.1 100
    string ligne=null; // une ligne du flux de lecture
    while((ligne=IN.ReadLine())!=""){
    //écho
    Console.Out.WriteLine("<-- "+ligne);
    }//while
    //écho dernière ligne
    Console.Out.WriteLine("<-- "+ligne);

    // on envoie les entêtes HTTP au serveur
    for (int i = 0; i < reqSOAP.Length; i++)
    {
    // envoi au serveur
    OUT.WriteLine(reqSOAP[i]);
    // écho écran
    Console.Out.WriteLine("--> " + reqSOAP[i]);
    }//for

    Voici l'échange de message:

    --> POST /Operations.asmx/ajouter HTTP/1.1
    --> Host: 10.23.149.71
    --> Content-Type: text/xml; charset=utf-8
    --> Content-Length: 297
    --> SOAPAction: "localhost/ajouter"
    -->
    <-- HTTP/1.1 100 Continue
    <-- Server: Microsoft-IIS/5.1
    <-- Date: Fri, 23 May 2008 07:44:05 GMT
    <-- X-Powered-By: ASP.NET
    <--
    --> <?xml version="1.0" encoding="utf-8"?>
    --> <soap:Envelope xmlnssi="http://www.w3.org/2001/XMLSchema-instance"xmlnss
    d="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/soap/
    envelope/">
    --> <soap:Body>
    --> <ajouter xmlns="localhost">
    --> <a>1</a>
    --> <b>2</b>
    --> </ajouter>
    --> </soap:Body>
    --> </soap:Envelope>
    -->
    <-- HTTP/1.1 500 Internal Server Error
    <-- Server: Microsoft-IIS/5.1
    <-- Date: Fri, 23 May 2008 07:44:35 GMT
    <-- X-Powered-By: ASP.NET
    <-- X-AspNet-Version: 2.0.50727
    <-- Cache-Control: private
    <-- Content-Type: text/xml; charset=utf-8
    <-- Content-Length: 430
    <--
    <-- <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://sche
    mas.xmlsoap.org/soap/envelope/" xmlnssi="http://www.w3.org/2001/XMLSchema-inst
    ance" xmlnssd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><fault
    code>soap:Client</faultcode><faultstring>Le serveur n'a pas reconnu la valeur de
    l'en-tête HTTP SOAPAction : localhost/ajouter.</faultstring><detail /></soap:Fa
    ult></soap:Body></soap:Envelope>
    [résultat=?]


    Je ne comprend vraiment pas pourquoi ca ne fonctionne pas, j'ai suivi un tuto à la lettre. Si quelqu'un gère bien les web services, le soap etc... je suis preneur de toute aide ou conseils avisés , merci beaucoup!!

    Bonne journée


    J'ai oublié de préciser que mon serveur IIS est de version 5.1 et mon framework .NET est de version 3.5


    J'ai essayé de mettre "http://tempuri.org/"+fonction à la place de localhost, j'ai alors une erreur 400 bad request, cela ne m'avance pas beaucoup...


    Merci de votre aide

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 18
    Points
    18
    Par défaut Résolu
    C'est bon, j'ai résolu mon problème qui était en fait d'une simplicité effarante.

    Il ne faut pas envoyer la requete soap ligne par ligne mais l'envoyer comme un seul string en concaténant toutes les informations.

    Erreur simpliste mais qui m'a quand m^me poser problème pendant un certain moment donc si quelqu'un se pose des questions sur l'utilisation manuelle de web services, je suis dispo.

    Bye bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec un client citrix
    Par deck10 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 19/08/2009, 18h10
  2. Réponses: 0
    Dernier message: 15/04/2008, 00h56
  3. [HTML] problème avec différents clients mail
    Par torn33260 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/04/2008, 12h35
  4. Probléme avec un client
    Par wikipierre dans le forum Droit du travail
    Réponses: 23
    Dernier message: 02/04/2008, 10h38
  5. Problème avec le client soap
    Par miai26 dans le forum Services Web
    Réponses: 8
    Dernier message: 04/12/2007, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo