none
[Web Service C#] Consommer les web service depuis un client de type getList() RRS feed

  • Discussion générale

  • Bonjour,

    Je travail actuellement sur mon premier projet sur les Web Service et je pense en avoir comprit le fonctionnement mais je n'arrive pas à récupérer les listes côté client.

    Explications:

    J'ai ajouté la référence du web service http://serveur/service/webservice?wsdl, donc elle figure bien dans ma solution.

    Dans ce service, il y a une méthode qui est censé renvoyer des listes de type .getServiceList() mais je m'arrache les cheveux depuis quelques jours quand à l'utilisation des méthodes et comment récupérer les données du serveur.

    D'après mes recherches, j'ai vu qu'il fallait créer une .dll après avoir créer un .cs du web service en question donc j'ai suivis les instructions mais je toujours rien.

    Voici les services :

    services

    et la structure de la solution:

    Les solutions proposées en ligne sont pour des cas très simples de type "hello world" et de ce fait pas applicable à mon cas.

    Merci d'avance pour votre aide.

    Cordialement.

    vendredi 1 juin 2012 08:02

Toutes les réponses

  • Bonjour,

    dans le paramétrage de la référence de service (Clic droit sur WSqueuemanager puis configurer la référence de service), avez-vous choisi System.Collection.Generic.List comme type de données?

    Si oui et qu'un de vos webservices retourne un Datatable, lisez ceci : http://social.msdn.microsoft.com/Forums/fr-FR/wcffr/thread/9e097490-56d5-4822-9c20-fe3dbc45ac8e/#0d2dd5a8-13a0-4709-ad7d-d00aebbcbf1f.

    Bon dev

    vendredi 1 juin 2012 10:59
  • En effet, le type de collection était sur System.Array .

    Je continue mes tests.


    junior developer

    vendredi 1 juin 2012 12:26
  • Re-Bonjour

    Bon mon souci est plus important. Je n'arrive pas du-tout à récupérer de données depuis mon client. Après de nombreuses  recherches je n'ai rien trouvé de pertinent pouvant m'aider à résoudre mon problème.

    Je dois surement mal m'y prendre en fait. La méthode SOAP semble la plus approprié mais je n'arrive pas à la mettre en oeuvre, les tutoriaux modélisant des cas plus simple que le mien.

                queuemanager.QueueManagerClient qm_CLient = new queuemanager.QueueManagerClient();
                qm_CLient.getServiceList("site 1");

    L'objectif étant de récupérer ces listes. 


    junior developer

    mardi 5 juin 2012 08:09
  • Bonjour,

    que se passe t-il précisement lorsque vous exécutez votre la méthode getServiceList ? Obtenez vous une erreur ?

    Avez vous tester votre webservice avec la page par défaut prévue ?

    Cordialement

    vendredi 8 juin 2012 13:21
    Modérateur
  • Bonjour,

    si qm_Client.GetServiceList ne renvoi pas d'erreur, il semble que votre webservice s'exécute correctement. Par contre, pour récupérer le résultat, il faut le mettre dans un objet du même type que celui retourné par le web service.

    Si votre webservice retourne un objet de type "monobjet",  il faut faire un truc du genre (je suis plutot vb.net mais en C# ça doit être a peu près ça...) :

    Monobjet lcresult = qm_Client.GetServiceList("site1");
    Vous aurez ainsi la valeur de retour du webservice dans l'objet lcresult.

    Bon courage


    vendredi 8 juin 2012 15:03
  • Tout d'abord merci pour le temps passé à m'aider à résoudre ce problème.

    Ensuite, on vient de me communiquer le fait que je n'interrogeais pas le bon service cependant cela ne résoud en rien mon problème car je n'arrive toujours pas à récupérer les données voici les informations dont je dispose d'après la documentation :

    "On propose à l'utilisateur la liste des sites sur lesquels il peut choisir une station disponible :

    Appel de la fonction List<SiteWS> getSiteList()

    Puis affichage des noms et identifiants du site : siteWS.getName(); siteWS.getId()

    En récupérant l'identifiant du site,  on propose la liste des stations déconnectées du site sélectionné (on effectue une connexion par Poste uniquement) :

    Appel de la fonction List<StationWS> getStationList(codeSite, 2)"

    Voici le code (qui ne fonctionne pas):

    namespace neoPlayer_Client { class Program { static void Main(string[] args) { ServiceWaitingIndicatorWS[] listServiceWaitingIndic = null;

    SiteWaitingIndicatorClient client = new SiteWaitingIndicatorClient(); String codeSite = "site 1"; listServiceWaitingIndic = client.getServiceList(codeSite); } } }


    Car getServiceList(string[]) prend un tableau de chaîne en paramètre.

    Mais l'IDE me dit : 'impossible de convertir implicitement le type 'neoPlayer_Client.SiteWaitingIndicatorService.EntityWaitingIndicatorWS[]' en 'EntityWaitingIndicatorWS[]'

    Merci d'avance.


    junior developer

    vendredi 8 juin 2012 16:02
  • Bonjour,

    vérifier que vous n'avez pas deux classe nommé EntityWaitingIndicatorWS dans des namespace différents. Par exemple :

    - une classe générée lors de l'ajout de votre web référence ( regarder le code généré si besoin pour votre proxy )

    - l'autre classe EntityWaitingIndicatorWS présente via une référence de votre projet.

    Cordialement

    vendredi 8 juin 2012 16:23
    Modérateur
  • Bonjour

    En effet il y avait un doublon de classe donc j'ai supprimer le SiteWaitingIndicatorService.cs que j'avais générer avec l'outil Visual Studio en renseignant l'URL du web service.

    Maintenant j'obtiens l'erreur : "Le message RPC getSiteAndServiceListRequest1 de l’opération getSiteAndServiceList1 contient un nom de corps getSiteAndServiceList non valide. Il doit être getSiteAndServiceList1" en m'indiquant le fichier Reference.cs

    Cordialement


    junior developer


    • Modifié Lila_85 lundi 11 juin 2012 08:09
    lundi 11 juin 2012 08:08
  • Bonjour,

    avez vous mis à jour votre proxy depuis que vous avez supprimé l'autre classe ?   les nom de vos méthodes se terminant par un 1 cela laisse suggérer que l'outil de génération  à rencontrer des doublons...

    Cordialement

    lundi 11 juin 2012 08:58
    Modérateur
  • Bonjour,

    Qu'entendez vous par "mise à jour du proxy"?

    Cordialement


    junior developer

    lundi 11 juin 2012 10:00
  • Mettre à jour la référence de service via l'assistant présent dans visual studio ( comme indiqué dans le post de bobertin plus haut ).

    Si besoin supprimer la référence et refaite l'opération d'ajout.

    lundi 11 juin 2012 11:47
    Modérateur
  • Bonjour,

    J'ai recommencé une solution puis j'ai ajouté la référence du service.

    Voici le code "simple" qui me donne comme erreur :

    "Le message RPC getSiteAndServiceListRequest1 de l’opération getSiteAndServiceList1 contient un nom de corps getSiteAndServiceList non valide. Il doit être getSiteAndServiceList1"

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using monService.SiteWaitingIndicatorService;
    
    
    
    namespace monService
    {
        class Program
        {
            static void Main(string[] args)
            {
                SiteWaitingIndicatorService.SiteWaitingIndicatorClient client = new SiteWaitingIndicatorService.SiteWaitingIndicatorClient();
                EntityWaitingIndicatorWS[] arrayEntityWaitIndic = null;
                arrayEntityWaitIndic = client.getSiteAndServiceList();
                
            }
        }
    }

    Cordialement


    junior developer

    lundi 11 juin 2012 14:04