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 :

erreur de serialisation de type (jeu de poker).


Sujet :

Windows Communication Foundation .NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 57
    Points : 42
    Points
    42
    Par défaut erreur de serialisation de type (jeu de poker).
    Bonjour,

    Je suis en train de réaliser un jeu de poker avec WCF .

    Tout fonctionne corectement jusqu'a la fin du tour , lors de l'établissement du vainqueur .
    Pour cela , je compare les diférentes mains des joueurs .

    Après ceci , jenvoie 1 message au joueur (méthode callback) pour informer du gagnant.

    voici la classe diagramme :
    Nom : ClassDiagram1.png
Affichages : 428
Taille : 80,6 Ko

    Voici l'interface callback :
    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
     
    [ServiceContract(Name = "PokerWCF",
            CallbackContract = typeof(IPokerCallBack),
            SessionMode = SessionMode.Required)]
        public interface IPoker
        {
     
            [OperationContract(IsInitiating = true, IsTerminating = false, IsOneWay = true)]
            void SassoirTable(JeuDePoker.Joueur j);
     
            [OperationContract(IsInitiating = false, IsTerminating = true, IsOneWay = true)]
            void SortirDeTable();
     
            [OperationContract(IsInitiating = true, IsTerminating = false, IsOneWay = true)]
            void Miser(int nombre);
     
            [OperationContract(IsInitiating = false, IsTerminating = false, IsOneWay = true)]
            void Check(int nombre);
     
            [OperationContract(IsInitiating = false, IsTerminating = false, IsOneWay = true)]
            void SeCoucher();
     
            [OperationContract]
            JeuDePoker.Table GetTable();
     
        }

    Evenement déclenchent le retour vers les joueurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void GagnantHandler(object sender, JoueurCollectionEventArgs e)
            {
                try
                {
                    callback.LeGagnant(e.Joueur);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

    lors de l'appel de cette méthode , j'obtient l'erreur suivante :
    {System.ServiceModel.CommunicationException: Une erreur s’est produite en tentant de sérialiser le paramètre http://tempuri.org/:j. Le message InnerException était «*Le type «*JeuDePoker.Paire*» avec le nom de contrat de données «*Paire:http://schemas.datacontract.org/2004/07/JeuDePoker*» n‘est pas attendu. Ajoutez tous les types non connus statiquement à la liste des types connus, par exemple en utilisant l’attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus qui est transmise à DataContractSerializer.*». Pour plus d’informations, voir InnerException. ---> System.Runtime.Serialization.SerializationException: Le type «*JeuDePoker.Paire*» avec le nom de contrat de données «*Paire:http://schemas.datacontract.org/2004/07/JeuDePoker*» n‘est pas attendu. Ajoutez tous les types non connus statiquement à la liste des types connus, par exemple en utilisant l’attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus qui est transmise à DataContractSerializer.
    un probleme avec la classe "paire" je pense que cela est du à cause de l'héritage .

    Comment puis-je régler ce probleme ?

    Pour autres informations , j'ai deja essayé de mettre "datacontract" sur la classe :

    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
     
    [DataContract]
        public class ValeurMain
        {
             ...
        }
     
     
    [SerializableAttribute()]
        [KnownTypeAttribute(typeof(ValeurMain))]
        public class Paire : ValeurMain, IComparable
        {
            [DataMember]
            public Enumerations.Valeurs PaireValeur { get; set; }
     
            ....
        }

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,

    Il faut utiliser l'attribut .
    Par rapport à ton exemple, c'est sur la classe parente qu'il faut ajouter les des classes filles ; pas l'inverse.

    Bon courage,

Discussions similaires

  1. [VBA-A] ADO - Erreur 13 Incompatibilité de Type
    Par db30 dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/04/2006, 14h30
  2. Réponses: 5
    Dernier message: 13/03/2006, 15h51
  3. [PHP MySQL] Erreur execution requête de type INSERT
    Par Pfeffer dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/01/2006, 17h38
  4. Erreur de conflit de type
    Par Jhulk dans le forum C
    Réponses: 15
    Dernier message: 16/01/2006, 15h47
  5. Erreur de conversion de type Null en String
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/07/2005, 15h25

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