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 :

Webservice et Arraylist


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Par défaut Webservice et Arraylist
    Bonjour à tous,

    Voilà mon problème :
    J'ai un Web Service qui contient une méthode qui renvoit un ArrayList.
    J'ai également une application cliente dans laquelle j'aimerais récupérer la valeur de l'ArrayList renvoyé par ma méthode.

    Par exemple :
    ArrayList al = new ArrayList();
    al = monWS.MethodeQuiRenvoitUnArrayList();

    Mais j'ai une erreur du genre :
    Cannot implicitly convert type 'System.ComponentModel.BindingList<object>' to 'System.Collections.ArrayList'

    J'ai essayé de caster (ArrayList)monWS.MethodeQuiRenvoitUnArrayList();
    Ou même encore d'encapsuler la liste dans une classe sérialisable mais rien n'a fonctionné.

    Est-ce que quelqu'un saurait m'aider ?

    Ps : si ce n'est pas clair dite le moi j'essayerai de reformuler.

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Quand tu renvoies à partir d'un web service un type réference (comme un ArrayList), seuls les champs public sont envoyés au client... donc les données.
    Ce qui signifie que quand le client reçoit l'ArrayList, ce n'est pas un objet de type ArrayList du framework (System.Data.ArrayList) mais un de type ArrayList de l'espace de nom du web service.

    Ce qui est logique car c'est impossible d'imaginer un web service qui renvoit les méthodes et leurs implémentation respectives d'un objet donné.

    Donc ce que tu peux faire dans le cas où tu avais mis dans l'ArrayList plusieurs objet de ta classe ClassX, tu renvoies un tableau de ClassX.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Par défaut
    En fait j'ai fais ceci

    Mon interface :
    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
     
    using System;
    using System.ServiceModel;
    using System.Runtime.Serialization;
    using nsPersonne;
    using System.Collections;
    using Services;
     
    namespace myService
    {
        [ServiceContract()]
        public interface Ic2iService
        {
            [OperationContract]
            string ConcatNames(string firstName, string lastName);
            [OperationContract]
            Personne GetChef();
            [OperationContract]
            ListWrapper GetTab();
        }
     
        public class c2iServiceImplementation : Ic2iService
        {
            public string ConcatNames(string firstName, string lastName)
            {
                Console.WriteLine(firstName);
                return string.Format("Bonjour {0} {1}", firstName, lastName);
            }
     
            public Personne GetChef()
            {
                Personne p = new Personne();
                p.Nom = "M";
                p.Prenom = "v";
                p.Age = 30;
                return p;
            }
     
            public ListWrapper GetTab()
            {
                ListWrapper lw = new ListWrapper();
     
                int iCpt;
     
                for (iCpt = 0; iCpt <= 5; iCpt++)
                {
                    Personne p = new Personne();
                    p.Nom = "lenom" + Convert.ToString(iCpt);
                    p.Prenom = "leprenom" + Convert.ToString(iCpt);
                    p.Age = 1 + iCpt;
     
                    lw.List.Add(p);
                }
     
                return lw;
            }
        }
    }
    Ma classe ListWrapper :
    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
     
    using System;
    using System.Collections;
    using System.Runtime.Serialization;
     
    namespace Services
    {   
        [Serializable]
        public class ListWrapper   
        {      
            private IList _list;
            public ListWrapper()
            {}
     
            public ListWrapper(IList list)
            {         
                _list = list;
            }      
     
            public IList List
            {         
                get{return _list;}
                set{_list = value;}
            }   
        }
    }
    Ma classe Personne :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.Serialization;
     
    namespace nsPersonne
    {
        [DataContract]
        public class Personne
        {
            private string m_Nom;
            private string m_Prenom;
            private int m_Age;
     
            [DataMember]
            public string Nom
            {
                get { return m_Nom; }
                set { m_Nom = value; }
            }
     
            [DataMember]
            public string Prenom
            {
                get { return m_Prenom; }
                set { m_Prenom = value; }
            }
     
            [DataMember]
            public int Age
            {
                get { return m_Age; }
                set { m_Age = value; }
            }
        }
    }
    Et le code de ma Windows application :
    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using nsPersonne;
    using System.Collections;
     
    namespace WinAppTestePersonne
    {
        public partial class Form1 : Form
        {       
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                localhost.Ic2iServiceClient client = new localhost.Ic2iServiceClient();
     
                string nom;
                string prenom;
                nom = tbNom.Text;
                prenom = tbPrenom.Text;
     
                string s = client.ConcatNames(nom, prenom);
     
                tbConcat.Text = s;
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                localhost.Ic2iServiceClient client = new localhost.Ic2iServiceClient();
     
                localhost.Personne p = new localhost.Personne();
     
                p = client.GetChef();
     
                tbAppNom.Text = p.Nom;
                tbAppPrenom.Text = p.Prenom;
                tbAppAge.Text = Convert.ToString(p.Age);
            }
     
            private void button3_Click(object sender, EventArgs e)
            {
                localhost.Ic2iServiceClient client = new localhost.Ic2iServiceClient();
                localhost.ListWrapper lw = new localhost.ListWrapper();
                localhost.Personne p = new localhost.Personne();
     
                lw = client.GetTab();
            }
        }
    }
    Tout fonctionne sauf l'appel de client.GetTab();
    Quelqu'un pourrait-il me dire comment je pourrais utiliser ce que contient ma méthode client.GetTab() ?
    (En code plutôt qu'en français si possible, car je débute et j'ai plus facil avec un exemple concret en code plutôt qu'avec des explications).
    Merci d'avance à celui ou ceux qui me répondront

Discussions similaires

  1. [WebService]Fichier Java et WSDL associé pour Web Services
    Par P4_le_requin_breton dans le forum Services Web
    Réponses: 9
    Dernier message: 23/02/2004, 12h55
  2. [ STRUTS ][ JSP ][ ArrayList] un lien pour trier
    Par LoulouFifi dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/02/2004, 17h24
  3. [WebServices] - Taux de change
    Par malbaladejo dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 03/02/2004, 16h20
  4. [XMLRAD] Security des WebModules et/ou des WebServices
    Par Lux interior dans le forum XMLRAD
    Réponses: 4
    Dernier message: 18/12/2002, 17h09
  5. WebService Google sur builder 5?
    Par billuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/11/2002, 19h43

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