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

Windows Communication Foundation .NET Discussion :

[WCF & LinqToSql] transfer d'objet problématique


Sujet :

Windows Communication Foundation .NET

  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut [WCF & LinqToSql] transfer d'objet problématique
    bonjour,

    Y a du linq mais je met le code ici car l'erreur semble être interne à WCF.

    A des fin de test j'ai créé un petit maping linq to sql avec 3 class

    TestTable, Mere et Fille.

    TestTable à un champ MereID dont je me sert pour faire OneToMany vers la Mere.

    Mere à un champs de typage pour l'héritage.

    Fille est une sous classe de Mere avec un champs FilleContent.

    j'ai créé un service :

    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
        public class Service1 : IService1
        {
            public void CreateDB()
            {
                using (TestDataContext db = new TestDataContext())
                {
                    if (db.DatabaseExists())
                        db.DeleteDatabase();
                    db.CreateDatabase();
     
                    Fille f = new Fille { FilleContent = "kikoo" };
                    db.Meres.InsertOnSubmit(f);
     
                    TestTable t = new TestTable { Mere = f };
     
                    db.TestTables.InsertOnSubmit(t);
     
                    db.SubmitChanges();
                }
            }
     
            public Mere GetMere()
            {
                using (TestDataContext db = new TestDataContext())
                {
                    var res = db.Meres.OfType<Mere>();
                    var res2 = res.First<Mere>();
                    return res2;
                }
            }
     
            public Fille GetFille()
            {
                using (TestDataContext db = new TestDataContext())
                {
                    return db.Meres.OfType<Fille>().First<Fille>();
                }
            }
     
            public TestTable GetTest()
            {
                using (TestDataContext db = new TestDataContext())
                {
                    return db.TestTables.First<TestTable>();
                }
            }
        }
    avec un client console :

    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
            static void Main(string[] args)
            {
                Service1Client client = new Service1Client();
     
                client.CreateDB();
     
                Fille f = client.GetFille();
     
                Type tf = f.GetType();
     
                Mere m = client.GetMere();
     
                Type tm = m.GetType();
     
                TestTable t = client.GetTest();
     
                Type tt = t.GetType();
            }

    et sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mere m = client.GetMere();
    J'ai une ComunicationException avec en Inner une WebException qui dit "La connexion sous-jacente a été fermée : La connexion a été interrompue de manière inattendue.".

    Il n'y a aucune exception coté serveur le code se déroule normalement.

    En gros j'ai l'impression que lorsque WCF doit transporter un objet de type fille en tant que Mere il y a un problème mais je ne comprends pas pourquoi ni comment résoudre ce problème.

    D'ailleurs quand je créé en premier un objet de type Mere au lieu de fille le code passe bien.

    Si vous pouvez m'aider ça serait cool

    Merci

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    oula ...


    Ça me semble bien être l'héritage mais c'est complètement fou ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        [DataContract]
        public class Base
        {
        }
     
        [DataContract]
        public class Son : Base
        {
            [DataMember]
            public string Text;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            public Base GetBase()
            {
                return new Son { Text = "toto" };
            }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base b = client.GetBase();
    lève la même exception ...

    Ça ne gère pas bien l'héritage WCF ???

  3. #3
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Bon j'ai crier au loup un peu vite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    namespace Test.DAL
    {
        [KnownType(typeof(Fille))]
        public partial class Mere
        {
     
        }
     
    }
    et Hop ca passe

  4. #4
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Je remonte ce post car je ne comprends pas la solution exposée et j'ai le m^me problème à résoudre : faire transiter par WCF une hiérarchie de classe

    En gros, Anthyme préconise d'écrire dans la classe mère qu'un des type connu est "Fille".
    C'est intéressant mais si il y a plusieurs type de "Fille" ? On ne peut pas ajouter à chaque fois le nouveau type dans la classe mère.
    De plus, en tant que développeur, on a pas forcément accès au namespace où se trouve les classes mères.

    voili voilou, apparement WCF a bien un problème avec l'héritage...

  5. #5
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Et bien si il faut marquer toutes les classe fille que tu veux faire passer dans WCF.

    Ce n'est pas vraiment un problème car WCF n'est pas fait pour faire passer tout et n'importe quoi dedans mais en général des DTO dont tu as le contrôle.

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

Discussions similaires

  1. probleme service wcf et renvoi de list<objet>
    Par livinho38 dans le forum Silverlight
    Réponses: 9
    Dernier message: 26/07/2010, 10h18
  2. Service WCF, Silverlight et taille des objets
    Par Steven62 dans le forum Windows Communication Foundation
    Réponses: 1
    Dernier message: 18/08/2009, 10h57
  3. Réponses: 4
    Dernier message: 25/03/2009, 17h19
  4. [WCF]Impossible d'accéder à un objet supprimé.
    Par Sonny dans le forum Windows Communication Foundation
    Réponses: 1
    Dernier message: 15/04/2008, 20h48
  5. Transferer un objet java
    Par yanis97 dans le forum Langage
    Réponses: 2
    Dernier message: 22/11/2006, 16h09

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