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 :

WSDL généré différent du WSDL importé sous VS2008


Sujet :

Services Web

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut WSDL généré différent du WSDL importé sous VS2008
    Bonjour à tous,

    Dans le cadre d'une application web, j'ai dû importer des WSDL afin d'implémenter des services web. J'ai par la suite généré des WSDL à partir du code et fait mes tests à partir de ces derniers WSDL. Les services étaient opérationnels.

    Seulement, quand j'ai essayé de tester à partir des WSDL initiaux, je n'ai pas réussi à le faire car il s'est avéré qu'ils n'étaient pas identiques aux WSDL que j'ai générés.

    Auriez-vous une idée de la raison pour laquelle Visual Studio ne générerait pas les mêmes WSDL que ceux utilisés en premier lieu?

    D'avance merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Les schémas des données ne seront pas les mêmes suivant que tu veuilles que tes données respectent le format SOAP1.1 ou SOAP1.2.

    Normalement le wsdl devrait te donner plus d'infos sur la version utilisée.

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    Merci pour ta réponse.

    Les deux WSDL utilisent la version 1.1 de SOAP.

    En fait, j'arrive à construire ma requête depuis SOAPUI et à atteindre mon service mais le type en entrée du service est à null.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Par défaut
    Bonjour à tous les deux,

    Il est tout à fait possible que Visual Studio (en tout cas sous VS 2005) n'interprète pas correctement certains type de donnée comme les types complexe!

    Ma questions est la suivante! As-tu réussi à générer et compiler ta classe interface que tu as généré à partir de ton fichier WSDL initial?

    Cédric

  5. #5
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    J'ai bien réussi à générer ma classe interface avec la majorité des types contenus dans le WSDL initial mais je ne suis pas arrivée à générer le type relatif aux exceptions. Je l'ai donc fait à la main en attendant dans mon service..

    Auriez-vous une idée de comment corriger ce dysfonctionnement?

    Est-ce que cela pourrait être la raison pour laquelle je reçois un null en entrée de mon service lorsque j'envoie ma requête?

    Pour information, le type de données en entrée dans mon service n'englobe pas le type de données relatif à l'exception.

    Je vous remercie.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par YousraL Voir le message
    Pour information, le type de données en entrée dans mon service n'englobe pas le type de données relatif à l'exception.
    je n'ai pas trop compris pourquoi vouloir utiliser le type Exception de .net.

  7. #7
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    Envoyé par h2s84
    je n'ai pas trop compris pourquoi vouloir utiliser le type Exception de .net.
    J'ai utilisé ce type afin de paramétrer le message d'erreur de la SOAPException envoyé lorsqu'une exception fonctionnelle est levée et parce que je n'arrive pas à générer le type Exception qui est un type complexe présent dans le WSDL initial depuis Visual Studio 2008.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pourquoi n'utilise tu pas les FaultContrat de WCF ?

    Utilise tu WCF pour interroger un service web non WCF ou ton client et serveur utilisent tous deux WCF ?

  9. #9
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    Merci pour tes réponses.

    Citation Envoyé par h2s84 Voir le message
    Pourquoi n'utilise tu pas les FaultContrat de WCF ?
    Je travaille avec le Framework 2.0. Je crois que WCF est l'un des composants du 3.0.

    Citation Envoyé par h2s84 Voir le message
    Utilise tu WCF pour interroger un service web non WCF ou ton client et serveur utilisent tous deux WCF ?
    Non.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Par défaut
    Salut Yousral,

    L'une des raisons pour laquelle tu reçois un null comme réponse est que le type de donnée en entrée n'a pas été repris correctement?

    Pourrais-tu donner un exemple sur comment tu as initialisé ton paramètre d'entrées et comment tu appelle la méthode du service Web distant!

    Sinon l'autre moyen pour contourner est de passer les objets Webrequest et Webresponse ou tu devrais pouvoir construire ton message SOAP manuellement et pouvoir aussi appelé!

    Cédric

  11. #11
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    Bonjour Cedric B.,

    Citation Envoyé par Cédric B. Voir le message
    L'une des raisons pour laquelle tu reçois un null comme réponse est que le type de donnée en entrée n'a pas été repris correctement?

    Pourrais-tu donner un exemple sur comment tu as initialisé ton paramètre d'entrées et comment tu appelle la méthode du service Web distant!

    Cédric
    Sur mon WSDL initial, j'ai une requête de type DMEGetHistoCana avec une réponse du même type et une exception de type ReasonType comme le montre le code ci-dessous:

    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
     
    <xsd:element name="GetHistoCanaRequest">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element ref="ghc:DMEGetHistoCana"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>
    <xsd:element name="GetHistoCanaResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element ref="ghc:DMEGetHistoCana"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>
    <xsd:element name="Exception" type="cct:ReasonType"/>
    C'est le type ReasonType qui n'est pas généré.

    J'ai donc crée le service GetHistoCana qui prend en entrée une DMEGetHistoCana et qui renvoie une GetHistoCanaResponse. Cela a généré le WSDL suivant:

    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
     
     
    <s:element name="GetHistoCana">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" name="DMEGetHistoCana" type="s1:DMEGetHistoCana" />
              </s:sequence>
            </s:complexType>
          </s:element>
          <s:element name="GetHistoCanaResponse">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" name="GetHistoCanaResult">
                  <s:complexType>
                    <s:sequence>
                      <s:element minOccurs="0" maxOccurs="1" ref="s1:DMEGetHistoCana" />
                    </s:sequence>
                  </s:complexType>
                </s:element>
              </s:sequence>
            </s:complexType>
          </s:element>

    Citation Envoyé par Cédric B. Voir le message

    Sinon l'autre moyen pour contourner est de passer les objets Webrequest et Webresponse ou tu devrais pouvoir construire ton message SOAP manuellement et pouvoir aussi appelé!

    Cédric
    Il me semble que c'est bien ce que je fais. Je génère le squelette de ma requête à partir du WSDL à travers SOAPUI et je remplis les balises par les données manuellement. Je ne peux pas faire autrement.

    D'avance merci.

  12. #12
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    J'ai aussi essayé avec le code ci-dessous mais la requête GetHistoCanaRequest est toujours à null.

    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
     
     
    <s:element name="GetHistoCana">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" name="GetHistoCanaRequest">
                  <s:complexType>
                    <s:sequence>
                      <s:element minOccurs="0" maxOccurs="1" ref="s1:DMEGetHistoCana" />
                    </s:sequence>
                  </s:complexType>
                </s:element>
              </s:sequence>
            </s:complexType>
          </s:element>
          <s:element name="GetHistoCanaResponse">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" name="GetHistoCanaResult">
                  <s:complexType>
                    <s:sequence>
                      <s:element minOccurs="0" maxOccurs="1" ref="s1:DMEGetHistoCana" />
                    </s:sequence>
                  </s:complexType>
                </s:element>
              </s:sequence>
            </s:complexType>
          </s:element>

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Par défaut
    Salut Yousral,

    Je ne connais pas vraiment "SOAPGUI"! Par contre, j'ai eu créé des classe interface avec wsdl.exe et csc.exe et ensuite je faisais référence depuis mon service web à ma classe interface créée? As-tu déjà essayé cela?

    Cédric

  14. #14
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    Je viens de générer mon interface à partir de l'utilitaire wsdl.exe, j'ai ajouté mon interface au projet et j'ai fait implémenter mon service à partir de cette interface et mes services sont opérationnels à partir des WSDL initiaux. Toutefois, je n'arrive toujours pas à générer le type ReasonType.

    Merci infiniment.

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Par défaut
    Salut Yousral,

    tu dis que tu n'arrive toujours pas à implémenter le type ReasonType? Cela sginifie que quand tu génère ton génère ton interface avec wsdl.exe ou quand tu l'as compile avec csc.exe, tu dois avoir une erreur! Quel est cette erreur?

    Cédric

  16. #16
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    Bonjour Cedric B.,

    Lors de la génération des interfaces à partir de wsdl.exe, je n'ai aucun message d'erreur. C'est juste que je ne retrouve pas le type ReasonType sur mon interface. Pour l'instant, je l'implémente à la main au niveau de mon service afin de lever une exception de type ReasonType quand une erreur fonctionnelle se produit. Ci-dessous le code relatif à ce type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsd:complexType name="ReasonType">
        <xsd:sequence>
          <xsd:element minOccurs="0" name="ReasonCode" type="udt:CodeType" />
          <xsd:element minOccurs="0" name="ReasonText" type="udt:TexteType" />
          <xsd:element name="ReasonStatut" type="udt:StatutType" />
        </xsd:sequence>
      </xsd:complexType>
    D'avance merci.

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Par défaut
    Salut Yousral,

    comme je l'a déjà dit plus haut, il est tout à fait que certains de données dans définis dans le WSDL sont mal interprété au niveau du c# et que tu dois soit modifier le code source de ta classe interface générée par le wsdl,, soit l'implémenter comme tu l'as fait!

    A part le typde de donneé "ReasonType", les autres ont été repris? Si oui, alors as-tu toujours des problème que ton paramètre d'entrée dans ta méthode est à null?

    Cédric

  18. #18
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Par défaut
    Citation Envoyé par Cédric B. Voir le message
    Salut Yousral,
    A part le typde de donneé "ReasonType", les autres ont été repris? Si oui, alors as-tu toujours des problème que ton paramètre d'entrée dans ta méthode est à null?
    Cédric
    Tous les types ont bien été repris et ce que je trouve bizarre c'est que certains types complexes implémentés de la même manière que le ReasonType ont bien été générés. Je le laisse à la main en attendant.

    Mis à part ce problème, mon paramètre d'entrée n'est plus à null et mes services sont opérationnels.

    Merci beaucoup.

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

Discussions similaires

  1. Erreur dans le WSDL généré par axis2
    Par taherlabidi dans le forum Services Web
    Réponses: 0
    Dernier message: 25/09/2012, 14h06
  2. Le Path des WSDL générés par AXIS
    Par maya dans le forum Services Web
    Réponses: 1
    Dernier message: 11/06/2009, 15h19
  3. Erreur de validation d'un WSDL généré
    Par RudyWI dans le forum Services Web
    Réponses: 1
    Dernier message: 20/04/2009, 16h24
  4. Réponses: 4
    Dernier message: 11/04/2008, 16h29

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