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 :

Référence web : opération avec signature différente


Sujet :

Services Web

  1. #1
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut Référence web : opération avec signature différente
    Bonjour à tous,

    J'ai développé un service web MyService en Java (avec Axis2 1.4.1 et XMLBeans).
    Ce service comporte une seule opération MyOperation.
    En entrée, cette opération accepte un élément MyOperation comportant deux strings in1 et in2.
    En sortie, cette opération retourne un élément MyOperationResponse comportant trois strings out1, out2 et out3, ainsi qu'un élément MyType out4.
    Un élément MyType comporte deux strings str1 et str2.

    Voici le contrat WSDL du service MyService :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                      xmlns:tns="http://www.example.org/MyService/"
                      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                      name="MyService"
                      targetNamespace="http://www.example.org/MyService/">
       <wsdl:types>
          <xsd:schema targetNamespace="http://www.example.org/MyService/">
             <xsd:complexType name="MyType">
                <xsd:sequence>
                   <xsd:element name="str1" type="xsd:string" /> 
                   <xsd:element name="str2" type="xsd:string" /> 
                </xsd:sequence>
             </xsd:complexType>
     
             <xsd:element name="MyOperation">
                <xsd:complexType>
                   <xsd:sequence>
                      <xsd:element name="in1" type="xsd:string" />
                      <xsd:element name="in2" type="xsd:string" />
                   </xsd:sequence>
                </xsd:complexType>
             </xsd:element>
     
             <xsd:element name="MyOperationResponse">
                <xsd:complexType>
                   <xsd:sequence>
                      <xsd:element name="out1" type="xsd:string" />
                      <xsd:element name="out2" type="xsd:string" />
                      <xsd:element name="out3" type="xsd:string" />
                      <xsd:element name="out4" type="tns:MyType" />
                   </xsd:sequence>
                </xsd:complexType>
             </xsd:element>
          </xsd:schema>
       </wsdl:types>
     
       <wsdl:message name="MyOperationRequest">
          <wsdl:part element="tns:MyOperation" name="parameters" />
       </wsdl:message>
     
       <wsdl:message name="MyOperationResponse">
          <wsdl:part element="tns:MyOperationResponse" name="parameters" />
       </wsdl:message>
     
       <wsdl:portType name="MyService">
          <wsdl:operation name="MyOperation">
             <wsdl:input message="tns:MyOperationRequest" />
             <wsdl:output message="tns:MyOperationResponse" />
          </wsdl:operation>
       </wsdl:portType>
     
       <wsdl:binding name="MyServiceSOAP" type="tns:MyService">
          <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
          <wsdl:operation name="MyOperation">
             <soap:operation soapAction="http://www.example.org/MyService/MyOperation" />
             <wsdl:input>
                <soap:body use="literal" />
             </wsdl:input>
             <wsdl:output>
               <soap:body use="literal" />
             </wsdl:output>
          </wsdl:operation>
       </wsdl:binding>
     
       <wsdl:service name="MyService">
          <wsdl:port binding="tns:MyServiceSOAP" name="MyServiceSOAP">
             <soap:address location="http://www.example.org/" />
          </wsdl:port>
       </wsdl:service>
    </wsdl:definitions>
    J'ai tout d'abord testé ce service avec un client en Java (toujours avec Axis2 1.4.1 et XMLBeans) : aucun problème.

    Mon objectif est de consommer ce service avec un client en C#.

    Pour cela, j'ai ajouté une référence Web dans un projet .NET (avec Visual Studio 2003).
    Mais lorsque je veux invoquer l'opération MyOperation, Visual Studio me propose bien de renseigner les paramètres d'entrée in1 et in2, mais en ce qui concerne les paramètres de sortie, je ne peux récupérer que out2, out3 et out4, mais pas out1 qui est tout simplement absent de la signature de l'opération MyOperation dans le stub client qui a été généré...

    Pourquoi le stub client généré par Visual Studio ne respecte-t-il pas la signature de l'opération telle que je l'ai définie dans le contrat WSDL du service MyService ?
    Comment puis-je résoudre ce problème ?


    Merci à vous.

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    Le premier paramètre de sortie out1 est en fait retourné par l'opération, contrairement aux autres paramètres de sorties qui sotn déclarés comme paramètres de sortie dans la liste des paramètres, ie ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String out1 = new MyService().MyOperation(in1, in2, out out2, out out3, out out4);
    alors que je m'attendais initialement à avoir quelquechose du type (comme en Java) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MyOperation myOperation = new MyOperation();
    myOperation.setIn1(in1);
    myOperation.setIn2(in2);
    MyOperationResponse myOperationResponse = new MyService().MyOperation(myOperation)
    Résolu.

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

Discussions similaires

  1. opérations avec nombres de bases différentes
    Par Dlieu dans le forum Linux
    Réponses: 3
    Dernier message: 11/10/2009, 10h57
  2. Réponses: 2
    Dernier message: 24/02/2008, 14h46
  3. [Compilateur] appel de méthodes avec signature similaire
    Par Monkeyget dans le forum Général Java
    Réponses: 4
    Dernier message: 30/03/2005, 20h14
  4. [FLASH MX] Bouton avec états différents
    Par Chucky69 dans le forum Flash
    Réponses: 5
    Dernier message: 24/08/2004, 12h01
  5. [web] Présentation avec Perl/Tk
    Par Stephan COMBES dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 01/06/2004, 21h45

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