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 :

Générer Message SOAP -> XML


Sujet :

Services Web

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut Générer Message SOAP -> XML
    Bonjour,
    je souhaiterais générer un message SOAP (XML) à partir de la classe auto générée par WSDL.exe.
    Je ne souhaite pas que cette classe envoi le message avec la méthode Invoke.
    Je voudrais récupérer le Message SOAP et l'envoyer indépendamment de cette classe.

    Comment puis-je procéder pour obtenir le message SOAP (XML) a envoyer?
    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 270
    Par défaut
    Après avoir décomplié la classe SoapHttpClientProtocole afin de voir le fonctionnement de la méthode Invoke que voici :

    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
    33
    34
     
    protected object[] Invoke(string method_name, object[] parameters)
    {
        WebResponse webResponse;
        object[] objArray;
        SoapMethodStubInfo method = (SoapMethodStubInfo) this.type_info.GetMethod(method_name);
        SoapClientMessage message = new SoapClientMessage(this, method, base.Url, parameters);
        message.CollectHeaders(this, message.MethodStubInfo.Headers, SoapHeaderDirection.In);
        SoapExtension[] extensions = SoapExtension.CreateExtensionChain(this.type_info.SoapExtensions[0], method.SoapExtensions, this.type_info.SoapExtensions[1]);
        try
        {
            WebRequest requestForMessage = this.GetRequestForMessage(base.uri, message);
            this.SendRequest(requestForMessage.GetRequestStream(), message, extensions);
            webResponse = this.GetWebResponse(requestForMessage);
        }
        catch (WebException exception)
        {
            webResponse = exception.Response;
            HttpWebResponse response2 = webResponse as HttpWebResponse;
            if ((response2 == null) || (response2.StatusCode != HttpStatusCode.InternalServerError))
            {
                throw exception;
            }
        }
        try
        {
            objArray = this.ReceiveResponse(webResponse, message, extensions);
        }
        finally
        {
            webResponse.Close();
        }
        return objArray;
    }
    On peux voir que la méthode Invoke crée un objet SoapClientMessage à l'aide d'un objet SoapMethodStubInfo pour récupérer les information sur la méthode exposée.
    Malheureusement SoapMethodStubInfo n'est pas accéssible et il est impossible de créer un objet SoapClientMessage car son construteur ne le permet pas (le seul moyen que j'ai trouvé de m'en servir c'est de dériver la classe auto générée par WSDL et de substituer la méthode GetWriterForMessage en appellant la méthode Invoke depuis la classe mère).

    Du coup quand je regarde la classe auto générée par WSDL.exe la première chose que l'ont voit c'est ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name="UpdaterSoap", Namespace="http://tempuri.org/")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BaseS))]
    public partial class Updater : System.Web.Services.Protocols.SoapHttpClientProtocol {
    J'imagine que ces décorations servent à l'encapsulation afin de pouvoir fournir du SOAP en entrée et sortie ce que j'aimerais savoir c'est, existe t'il un moyen de générer un message soap sous forme de xml, string, byte[] en utilisant ces décorations et ou l'héritage de SoapHttpClientProtocole enfin bref un moyen plus simple que d'avoir à écrire le xml à la main et surtout de ne pas avoir à écrire une méthode de création de SOAP xml par méthodes exposées étant données qu'elles n'ont pas toutes la même signature (comme le fait la méthode invoke mais sans envoyer de requete au serveur et qui retournerait le soap sous forme de xml, string ou byte[]) .

    Merci

Discussions similaires

  1. Recuperation d'un message SOAP au format XML
    Par gossetpascal dans le forum Web & réseau
    Réponses: 3
    Dernier message: 01/03/2012, 16h07
  2. [SOAP Proxy] outil pour tester le contenu XML des message SOAP
    Par evan.caballero dans le forum Services Web
    Réponses: 3
    Dernier message: 26/01/2010, 20h57
  3. [Choix] [Débutant] SOAP ou XML-RPC ?
    Par Noisette dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 15/01/2009, 17h31
  4. [castor][SOAP] Probleme avec la validation du message SOAP
    Par VinceFromBcn dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/09/2005, 14h12
  5. []générer et LIRE du xml avec vb: sélection d'un node
    Par chris21 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 19/09/2003, 13h14

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