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

Windows Forms Discussion :

[C#] [WebServices] Http Request et SOAP


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut [C#] [WebServices] Http Request et SOAP
    Bonjour,

    Alors voila un pb qu'il est bien compliqué à expliquer.

    Alors je me lance...

    J'ai crée un WebService, dans ce Web Service il y a un fichier CS decrivant un certains nombre de class, ce fichier a été généré à partir d'un spec (.xsd) grace à l'outils xsd.exe. Mon application joue le role de serveur, et le client qui doit m'interroger doit m'interoger via une requete HTTP POST 1.1 (Forcément le bougre ne peut pas interroger directement le WebService ). Bon voici un exemple de requete que le client pourrait m'envoyer (via telnet par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    POST /MonService/MaPage.aspx HTTP/1.1
    Host: localhost
    Content-Type:text/xml; charset="utf-8"
    Content-Length: 1464
    Content-ID: </bidule>
    SOAPAction: ""
     
    <?xml version="1.0" encoding="utf-8" ?>
    <env:Envelope xmlns:env="url"> 
          <env:Header>
                <...plein de chose ...>
          </env:Header>	
          <env:Body>
                <... encore plein de chose ...>
          </env:Body>
    </env:Envelope>
    Donc comme on le remarque la requete que l'on m'envoie fait intervenir SOAP. Alors qd je recois cette requete de mon coté, je récupère le corps XML, SOAP et je tente de le déserializer car il répond à la spec qui m'a permit de générer mes classes citées plus haut (via xsd.exe). Et avec ce corps SOAP que je tente de désérializer, pour obtenir un objet de mes classes, avec le XMLSerializer et le XMLMapping avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void MaMethode(HttpContext context) {
    ...
    XmlTypeMapping myMapping = (new SoapReflectionImporter().ImportTypeMapping(typeof(MonType)));
    XmlSerializer mySerializer = new XmlSerializer(myMapping);
    StreamReader reader = new StreamReader(context.Request.InputStream);
    // Deserializes and casts the object.
    MonType myObjet = (MonType) mySerializer.Deserialize(reader);
    ...
    }
    et je recois au moment de créer mon XMLSerialzer l'exception suivante :
    "File or assembly name p0ny7lpx.dll, or one of its dependencies, was not found."
    voila est-ce que je m'y prends mal ou comment corriger mon erreur...

    Merci d'avance...

    j'ai essayé d'etre le plus clair possible, mais j'ai ptet mal expliqué ...
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  2. #2
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    up
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  3. #3
    Membre du Club Avatar de Raiden
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Points : 65
    Points
    65
    Par défaut
    Résolu?
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

  4. #4
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    non pas du tout, pas de réponse donc g remonté un peu le sujet...

    mais des recherches que j'ai pu faire, visiblement il faudrait que le webService est accès au répertoire temp (c:\Windows\temp) hors je crois lui avoir attribuer les droits (je suis sous windows XP) alors si qq1 a reussi a bien attribuer les droits sur ce rép, qu'il me dise comment il a fait.

    sinon g essayé le meme code, mais sans passer par le mapping :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void MaMethode(HttpContext context) { 
    ... 
    XmlSerializer mySerializer = new XmlSerializer(typeof(MonType)); 
    StreamReader reader = new StreamReader(context.Request.InputStream); 
    // Deserializes and casts the object. 
    MonType myObjet = (MonType) mySerializer.Deserialize(reader); 
    ... 
    }
    et le XMLSerializer ne plante pas a sa construction, mais plante lors de la désérialisation, en me disant que le document XML n'est pas conforme a l'endroit (2,2), hors cette endroit correspont à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version="1.0" encoding="utf-8" ?> --->ligne1
    <env:Envelope xmlns:env="url"> --->ligne2
    donc je ne comprends pô
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  5. #5
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    re up si qq1 a une idée
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  6. #6
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    bon en espérant que cela puisse servir a qq1, j'ai trouvé le pb...
    voila en gros le code a mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void MaMethode(HttpContext context) { 
    ... 
    XmlSerializer mySerializer = new XmlSerializer(typeof(MonType)); 
    StreamReader reader = new StreamReader(context.Request.InputStream); 
    // Deserializes and casts the object. 
    MonType myObjet = (MonType) mySerializer.Deserialize(reader); 
    ... 
    }
    et la requete à envoyer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    POST /MonService/MaPage.aspx HTTP/1.1 
    Host: localhost 
    Content-Type:text/xml; charset="utf-8" 
    Content-Length: 1464 
    Content-ID: </bidule> 
    SOAPAction: "" 
     
    <?xml version="1.0" encoding="utf-8" ?> 
    <env:Envelope xmlns:env="url"> 
          <env:Header> 
                <...plein de chose ...> 
          </env:Header>    
          <env:Body> 
                <MonType ...>
                      <... encore plein de chose ...> 
                </MonType ...>
          </env:Body> 
    </env:Envelope>
    donc vous allez me dire, mais c la meme chose qu'avant, et je vais vous dire correct. Sauf que dans le code de départ il faut rajouter une analyse du document XML envoyé, ce que je n'ai pas encore rajouté
    en fait le document XML qui doit etre fournit au XMLSerializer ne doit pas tout contenit mais juste la partie concernant l'objet a désérializer, donc juste la partie contenue dans le Body...

    ensuite il faut vérifier que cette partie dans le body a le même namespace que celui définit dans la classe de l'objet que l'on veut désérializer.

    Voila je c pas si je suis tres clair, mais ce qui comprendrons...comprendrons
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    bonjour, j'ai un service windows .net qui doit envoyer une requete http vers une page asp ou autre, qui doit me renvoyer un document XML.
    n'ayant jamais utilisé les requetes http, comment envoyer ma requete et récupér la réponse ??
    merci d'avance.

  8. #8
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    via HTTpWebRequest...de mémoire...
    il faut indiquer le flux que tu envoie au WebService via Stream...et bien paramétrer les différents paramètres de la requete (ContentType, Header, etc...
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    je sais que j'en demande peut-etre beaucoup mais tu n'aurai pas un exemple de code ... ce serait beaucoup plus concret et surtout plus utile car je n'ai aucune idée des actions à mener ...

  10. #10
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    ouep mais faut ke je cherche...et tu as intéret a comprendre du 1er coup
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  11. #11
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    alors voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
       //Ma requête au format SOAP
       string request = "<?xml version='1.0' encoding='"+_mtRemoteEncoding+"'?>"+
       "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "+
       "xmlns:xsd='http://www.w3.org/2001/XMLSchema' "+
       "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"+
       "<soap:Body><id xmlns='http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-0'>"+
       "12</id></soap:Body></soap:Envelope>";
       request = request.Replace("\"", "'");
     
     
       //La je défini ma requête HTTP
       HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create("http://localhost/MonWevService/Handler.asmx");
       webRequest.Method = "POST";
       webRequest.KeepAlive = false;
       webRequest.ContentType = "text/plain; charset=UTF8";
       webRequest.ContentLength = request.Length;
     
       //Ici je renseigne la méthode du WebService que je veux appeller
       webRequest.Headers.Add("SOAPAction", "http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-0/CreateSubmitReq");
       webRequest.ProtocolVersion = new Version(1,1);
       webRequest.Timeout = 500;
       StreamWriter stream = new StreamWriter(webRequest.GetRequestStream());
       stream.Write(request);
       stream.Flush();
       stream.Close();
     
       //Et la je récupère la réponse...
       HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse();
       StreamReader responseReader = new StreamReader(webResponse.GetResponseStream());
       string command = responseReader.ReadToEnd();
       webResponse.Close();
    le tour est joué
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    merci ... je vais essayer de faire avec sachant que j'utilise pas la moitié de ce que tu as mis
    sinon comment faire pour éviter une erreur 401 lors de l'envoi de ma requete, sachant que le site utilise l'authentification intégrée ...

  13. #13
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    pour éviter les erreurs en général...enfin moi la manière dont g procédé était simple...je mets une requête dans un fichier texte...je fais un telnet vers mon webService et je lui envoie ma requête par copier coller...de la j'adapte mon code pour qu'il ressemble à mon fichier text et ainsi de suite...c la seule méthode que g trouvé
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    bon j'ai vraiment compris ton dernier mais peu importe, j'ai réussi à récupérer le statusCode de ma réponse http donc il me reste plus que la lecture du flux xml qui devrait pas poser de problème via un stream ( j'ai bon ?? )

  15. #15
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    exactement...
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    j'ai un léger problème pour récupérer le xml
    en fait je récupère bien le stream et j'arrive à afficher mon xml mais dès que je charge le contenu dans un xmlTextReader, plus rien ...
    pas de contenu, pas d'attributs et ça plante sur le xmlTextReader.Read() avec une erreur "the root element is missing"
    j'ai essayé avec un xmlDocument en chargeant le stream et ça fait la même erreur ...

  17. #17
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    j'avais u ce genre de pb a cause de la première balise :
    <Xml version=1.1 encoding=utf-8> ou un truc comme ca...en la virant ca allait mieux...mais apres ca peut dépendre de plein de chose...et la faut investigué un peu...

    Google est ton ami
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  18. #18
    Nouveau membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 22
    Points : 27
    Points
    27
    Par défaut
    bonjour,

    Je viens de me mettre au web service et j'ai un soucis quand j'envoie le xml de sortie, je recupere le xml du wsdl. alors que je devrai avoir le xml de retour avec mes resultat attendu.

    public string EnvoieRequete(string requete)
    {
    string command = "";
    try
    {
    //La je défini ma requête HTTP
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://www.secret.fr/services/Service?wsdl");
    webRequest.Method = "POST";
    webRequest.KeepAlive = false;
    webRequest.ContentType = "text/plain; charset=UTF8";
    webRequest.ContentLength = requete.Length;

    //Ici je renseigne la méthode du WebService que je veux appeller
    webRequest.Headers.Add("Tarifer", "http://www.secret.fr/services/Service");
    webRequest.ProtocolVersion = new Version(1, 1);
    webRequest.Timeout = 4000;
    StreamWriter stream = new StreamWriter(webRequest.GetRequestStream());
    stream.Write(requete);
    stream.Flush();
    stream.Close();

    //Et la je récupère la réponse...
    HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
    StreamReader responseReader = new StreamReader(webResponse.GetResponseStream());
    command = responseReader.ReadToEnd();
    webResponse.Close();

    return command;
    }


    si vous avez une idée ou me guidé dans ma demarche.
    Car je pense pas avoir tous compris

    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/01/2013, 10h12
  2. WebService HTTP 400 Bad Request
    Par mrkinfo dans le forum Services Web
    Réponses: 3
    Dernier message: 09/12/2009, 16h41
  3. XML Http Request
    Par ouam81 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/06/2006, 19h25
  4. HTTP request failed
    Par claralavraie dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/05/2006, 11h16
  5. Compo HTTP et client SOAP webservice ?
    Par Bruno13 dans le forum Web & réseau
    Réponses: 34
    Dernier message: 03/04/2006, 18h09

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