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 :
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 :
un probleme avec la classe "paire" je pense que cela est du à cause de l'héritage .{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.
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
Partager