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

Silverlight Discussion :

Webservice - passage de paramètre


Sujet :

Silverlight

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Webservice - passage de paramètre
    Re bonjour tout le monde ^^

    Me revoilà donc avec un nouveau problème assez étrange...

    Alors j'accède à mes services web via mon fichier de conf et les méthodes que VS08 a eu la gentillesse de me générer automatiquement à partir de mon WSDL.

    Pour ce qui est des services sans paramètre, ça fonctionne nickel mais lorsqu'il faut passer des paramètres, ça se complique un peu...

    Voila comment je fais:
    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
    private void ConnexionBtn_Click(object sender, RoutedEventArgs e)
    {
      ServiceReferenceAAF.serviceClient proxy = new ServiceReferenceAAF.serviceClient();
      proxy.connexionCompleted += new EventHandler<AAF_Presentation_Silverlight.ServiceReferenceAAF.connexionCompletedEventArgs>(AAFService_ConnexionCompleted);
      proxy.connexionAsync(login, password);
    }
     
    void AAFService_ConnexionCompleted(object sender, ServiceReferenceAAF.connexionCompletedEventArgs e)
    {
      if (e.Error == null)
      {
      ...
      }
      else
      {
      ...
      }
    }
    donc j'appelle le service "connexion" en lui passant un login et un mot de passe (et la méthode attend bien 2 string donc je ne peux pas faire autrement)

    Voici la partie du WSDL correspondant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsd:element name="connexion">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="login" type="xsd:string" maxOccurs="1" minOccurs="1"></xsd:element>
          <xsd:element name="password" type="xsd:string" maxOccurs="1" minOccurs="1"></xsd:element>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>
    Le problème est qu'il me renvoit une exception. Lorsque je vais consulté les fichiers log du serveur, voila ce que j'ai la surprise de voir:
    [ERROR] org.apache.axis2.databinding.ADBException: Unexpected subelement login
    Alors la je comprend pas trop...

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 253
    Points
    28 253
    Par défaut
    effectivement. c'est comme si le message soap ne correspondait pas au WDSL. t'as regardé avec un fiddler la tête du message soap qui voyage?
    il te faut avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <connexion>
       <login/>
       <password/>
    </connexion>

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci pour la réponse:

    Donc non je n'ai pas pu sniffer les requêtes SOAP car d'une part fiddler ne capture les événements de mon appli (parce qu'elle est sur un autre port?) et d'autre part firebug récupère pas les requêtes SOAP apparemment...

    Y'a t'il un autre moyen de voir les requêtes qui transitent sur le réseau...?

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 253
    Points
    28 253
    Par défaut
    fiddler capture tout normalement SI tu utilises IE. après, il faut cocher la case "mode proxy".

    il faudrait creuser fiddler mais je pense qu'on doit pouvoir tout choper. au pire, il reste ethereal, plus complet mais plus complexe (de mémoire)

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par greenHawk Voir le message
    Le problème est qu'il me renvoit une exception.
    Laquelle ? Est-ce que tu arrives bien dans ta méthode de Callback ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Ben en fait c'est toujours la même l'exception puisque silverlight est à l'heure actuelle incapable de catcher les exceptions venant du serveur...

    Pour info c'est celle si:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The remote server returned an unexpected response: (404) not found
    Et donc oui je suis sur d'arriver dans mon callback puisque c'est grâce à lui que j'affiche l'exception

    Donc à l'heure actuelle j'essaye de faire fonctionner fiddler qui marche parfaitement avec n'importe quel site sauf mon appli :'(
    Je me demande si ça vient du fait qu'elle est sur un port différent (1211 au lieu de 8888) ou si c'est parce qu'elle est en local...

    Enfin je creuse mais ce bug m'inquiète tout de même car je n'ai fait qu'utiliser les sources générées par VS08 à partir de mon WSDL donc si ça, ça fonctionne pas... :s
    Ah, et je n'utilise pas du tout de fichier ASMX donc ça vient peut-être de là...

    Bon si j'arrive pas à utiliser fiddler j'essaierai d'appeler mes WS "à la main" sans passer par les classes générées. Ca risque d'être plus prise de tête pour les paramètres d'entrée et de sortie mais si au moins ça marche...

  7. #7
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 253
    Points
    28 253
    Par défaut
    pourtant,
    The remote server returned an unexpected response: (404) not found
    signifierait qu'il ne trouve pas le WS

    tandis que plus haut, il semble avoir un problème avec l'enveloppe SOAP.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Oui, ça:
    The remote server returned an unexpected response: (404) not found
    C'est ce qu'il me retourne systématiquement côté client

    et ça:
    [ERROR] org.apache.axis2.databinding.ADBException: Unexpected subelement login
    C'est ce que j'ai dans mes logs du serveur.


    Bon j'ai finalement trouvé une alternative en n'utilisant pas les sources générées par VS08 (il semblerait donc bien que le problème vienne de la).
    Voila comment je fais:

    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
    private void ConnexionBtn_Click(object sender, RoutedEventArgs e)
    {
      //Appel au service web
      //Paramètres
      string login = idTB.Text;
     
      //On construit l'URL vers le WS
      string aafServURL = String.Format("http://localhost:8080/AAF_ServiceServer/services/service/connexion?login={0}&password={1}", login, password);
     
      //On initialise l'appel asynchrone au service
      WebClient aafServService = new WebClient();
      aafServService.DownloadStringCompleted += new DownloadStringCompletedEventHandler(AAFService_ConnexionCompleted);
      aafServService.DownloadStringAsync(new Uri(aafServURL));
    }
     
    void AAFService_ConnexionCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
      DisplayAF(e.Result);
    }
     
     void DisplayAF(string xmlContent)
    {
      XDocument xmlPSortie = XDocument.Parse(xmlContent);
      var nom = from sortie in xmlPSortie.Descendants("user")
                     select (string)sortie.Element("nom");
     
      FenetreErr.DataContext = nom.First();
      FenetreErr.Visibility = Visibility.Visible;
    }
    Ça fonctionne pour le moment mais je craint le jour où je vais devoir m'attaquer à mes services qui demande des collections en paramètre (d'autant qu'à priori, on ne peut pas dépasser 32o de données en GET)... :s

    Enfin quoi qu'il en soit je ne met pas ce sujet en [Résolu] puisque ce n'est pas le cas, donc si vous avez d'autres idées, n'hésitez pas, je serai ravis de les essayer et de faire fonctionner ces WS à l'aides des méthodes générée, ce serai beaucoup plus propre, maintenable et beaucoup moins lourd je pense ^^'

    En tout cas merci de vos réponses et de votre patience

  9. #9
    Membre du Club

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 48
    Points
    48
    Par défaut
    Salut,

    j'ai trouvé un article sur le blog de Karen Corby qui travaille sur le projet Silverlight (notament la pile réseau et sur des contrôles, le calendar c'est d'elle je crois) :
    http://scorbs.com/2008/04/05/silverl...-communication

    Elle parle de WebClient, mais aussi de HttpWebRequest et HttpWebResponse.

    Je pense qu'avec HttpWebRequest et HttpWebResponse, il est possible de faire ce que tu veux. Ce sont les APIs HTTP standard de .NET donc...

    Bonne continuation!

  10. #10
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup Alex, ton article à l'air très intéressant.

    Dès que j'ai une minute, j'essaye la méthode qui y est décrite

Discussions similaires

  1. passage de paramètre à des webservice Talend
    Par wawanito dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 22/05/2009, 11h55
  2. Réponses: 3
    Dernier message: 22/03/2009, 14h08
  3. [WebService] Passage d'objets en paramètre
    Par Philoulheinz dans le forum Langage
    Réponses: 3
    Dernier message: 05/01/2009, 09h55
  4. Probleme de passage de paramètre à un WebService
    Par spolo dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2007, 10h35
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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