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 :

probleme service wcf et renvoi de list<objet>


Sujet :

Silverlight

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 200
    Points : 52
    Points
    52
    Par défaut probleme service wcf et renvoi de list<objet>
    Bonjour,


    j'un service WCF qui doit me renvoyer une liste d'objet.
    si je cré une list<objet> et que je met des objet de type toto, je vois que la liste est bien une liste d'objet toto (lors du debug), cependant une erreur survient lors du return de mon service...
    erreur :
    Le serveur distant a retourné une erreur : NotFound.
    cette erreur n'apparait pas lorsque si la liste créée est une list<toto>

    (ce fonctionnement marche bien coté client, mais pas coté servuer où j'ai mes service wcf) comment faire?? il m'est interessant voir indispensable d'avoir des objet sans type dans mon service puisque les type varie en fonction de l'appel du service.

    je vous remercie.

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Un Not Found vient en général d'une erreur de communication. Regarde avec Fiddler pour voir le code retourné par ton service et si il te donne une exception.

    Mieux tu peux également lancer un debug sur ton service WCF et voir si tu arrives bien au return. Regarde également si tu n'as pas un problème de cross domain.

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Quand tu utilises une méthode WCF qui retourne une liste d'objet de type T et que les instances contenues dans la liste peuvent être d'un type dérivé de T, tu dois préciser au niveau de la classe d'implémentation de l'interface de contrat le type de chaque objet susceptible d'être retourné via l'attribut [KnownType].

  4. #4
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 200
    Points : 52
    Points
    52
    Par défaut
    tout d'abord merci pour vos réponses !!!

    skyounet, en effet j'arriv bien jusqu'au return. et c'est au moment de l'envoi au client (je pense) que sa 'saute'.
    je m'explique :
    si au lieu de mettre ma list<objet> je retourne directement une list<toto> la sa marche nikel mais je veux des objets non typés.... quand j'utilise ma list<objet> qui contient des toto, au moment du return quand je watch ma liste je vois bien mes objet toto dans la liste mais apres sa saute

    as tu un liens pour que je regarde pour le cross domain ? je vois pas de quoi tu parle.

    bluedeep :j'ai pas compris l'histoire du knowtype. comment et où faut il gérer ça ?

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par livinho38 Voir le message
    bluedeep :j'ai pas compris l'histoire du knowtype. comment et où faut il gérer ça ?
    Comme attribut de classe de l'implémentatioon du contrat WCF, par exemple.

    Ou dans la définition de ton contrat de message.

    Dès l'instant où tu veux manipuler via WCF des objets de type hérités d'un type prescrit dans un contrat, tu dois spécifier de manière extensive les différents types susceptibles d'être utilisés.

    Exemple :

    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
     
     
    [DataContract]
    [KnownType(typeof(Area))]
    [KnownType(typeof(Center))]
    [KnownType(typeof(District))]
    public class SearchCostCenterRequest 
    {
      public UOBase UOBase
      {
        get
        {
          return _uoBase;
        }
        set
        {
          _uoBase = value;
        }
      }
    // .....
    }
    Ici la propriété UOBASE du DataContract SearchCostCenterRequest peut retourner une instance de type Area, Center, ou District. On le précise via les KnownTypeAttribute. Sinon, la serialisation WCF part en sucette.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 200
    Points : 52
    Points
    52
    Par défaut
    voici un exemple de comment je fonctionne :

    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
      public Customer serviceCustomer() {
     
                Customer customer1 = new Customer();
                customer1.name = "monnom";
                customer1.sexe = true;
     
                String t1 = "t1";
                String t2 = "t2";
     
                customer1.detailsList.Add(t1);
                customer1.detailsList.Add(t2);
     
               Toto dto = new Toto();
               customer1.detailsList.Add(dto);
     
                return customer1;
            }
    avec ma classe customer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Customer 
        {
            public Customer()
            {
                this.detailsList = new  List<object>();
            }
            public string name {get;set;}
            public bool sexe {get; set;}
            public List<object> detailsList{ get; set; }
     
     
        }
    on voit ici que j'ai une list<objet> et que dedans je met des objet typé. (ceci peu se faire au niveau du service ou dans une autre classe.)
    à quel niveau dois-je mettre les knowtype?

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Sur la classe Customer.

    De préference, si tu peux remplacer le paramètre de généricité de ta list par un antécessseur commun à tes objets, ce serait mieux que d'utiliser object comme antécesseur commun.

  8. #8
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 200
    Points : 52
    Points
    52
    Par défaut
    autrement dit avoir une classe mere exemple ClasseM de sorte a avoir
    public class Toto : classeM
    ?

    et avoir ensuite une list<ClasseM> qui contient des toto ?(par rapport a mon code precedent)

    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
     
    [datacontract]
    [knowType (typeof(classeM))]
    public class Customer 
        {
            public Customer()
            {
                this.detailsList = new  List<object>();
            }
            public string name {get;set;}
            public bool sexe {get; set;}
            public List<ClasseM> detailsList{ get; set; }
     
     
        }
    la classeM peut-elle rester vide (elle sert juste de classe mere) sans que ça gene quant à l'utilisation des propriété de toto ?

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par livinho38 Voir le message
    autrement dit avoir une classe mere exemple ClasseM de sorte a avoir
    public class Toto : classeM
    ?

    et avoir ensuite une list<ClasseM> qui contient des toto ?(par rapport a mon code precedent)

    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
     
    [datacontract]
    [knowType (typeof(classeM))]
    public class Customer 
        {
            public Customer()
            {
                this.detailsList = new  List<object>();
            }
            public string name {get;set;}
            public bool sexe {get; set;}
            public List<ClasseM> detailsList{ get; set; }
     
     
        }
    la classeM peut-elle rester vide (elle sert juste de classe mere) sans que ça gene quant à l'utilisation des propriété de toto ?
    Presque, sauf que ici, admettons que tu as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Toto: ClassM
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Titi : ClassM
    tu devras mettre

    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
    [datacontract]
    [KnownType (typeof(Toto))]
    [KnownType (typeof(Titit))]
    public class Customer 
        {
            public Customer()
            {
                this.detailsList = new  List<object>();
            }
            public string name {get;set;}
            public bool sexe {get; set;}
            public List<ClasseM> detailsList{ get; set; }
     
     
        }
    Sinon, le KnownType ne servirait à rien : puisqu'il sert justement à guider WCF dans se serialsiation, préciser un type déjà indiqué n'aurait aucun sens.

  10. #10
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 200
    Points : 52
    Points
    52
    Par défaut
    juste pour indiquer que je n'ai pas réussi en passant par les datacontract et tout,
    en effet je réalise plusieurs traitement coté serveuret du coup c'était compliqué (et dans mon cas pas le + pertinant puisque ils faut rajouter tout les types possible)
    n'ayant pas reussi a réalisé comme ça, au lieu de renvoiyer une list<objet> j'ai effectuer coté serveur une transformation de mes données en list<ligne> et list<colonne>

    ensuite j'ai créé coté client un datatable qui m'a permis de creer mon tableau en ajoutant des rows.

    (voir mon post "inserer des list<object> en tant que ligne de datagrid " )

    merci beaucoup a tous tout de meme pour vos réponse, j'aurais appris le concept d'indiquer les datacontract etc..

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

Discussions similaires

  1. Probleme de connection au service WCF
    Par Seth77 dans le forum Windows Communication Foundation
    Réponses: 7
    Dernier message: 28/06/2012, 18h18
  2. Réponses: 8
    Dernier message: 05/05/2011, 13h44
  3. probleme acces a un service WCF
    Par bellak dans le forum Windows Communication Foundation
    Réponses: 4
    Dernier message: 27/10/2010, 11h23
  4. Réponses: 5
    Dernier message: 30/08/2010, 10h55
  5. probleme avec service wcf
    Par tchitchimon dans le forum Silverlight
    Réponses: 4
    Dernier message: 18/07/2008, 16h21

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