Bonjour à tous,
Je suis actuellement en train de coder un service WCF dont une des méthodes doit pouvoir récupérer en paramètre un String, un Int32 ou une List<String>.
Concrètement, le code serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 [ServiceContract] class MonService { [OperationContract] void PasserObjet(Object monObjet) { // Je peux recevoir un String, un Int32 ou une List<String>. MessageBox.Show("Objet de type " + monObjet.GetType().FullName); } }
Voici ce qu'il se passe lorsque le programme client sollicite la méthode "PasserObjet" de mon service WCF :
Dans le cas présent, mon serveur me dit "Objet de type System.String". Je peux alors faire un cast et utiliser mon paramètre. Tout va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void btn1_Click(object sender, EventArgs e) { proxy.PasserObjet("Chaine de caractère"); }
Dans ce cas par contre, le programme client plante et me renvoie une exception qui ressemble à cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void btn2_Click(object sender, EventArgs e) { List<String> _lstStr = new List<String>(); _lstStr.Add("Liste de"); _lstStr.Add("chaine de"); _lstStr.Add("caractère."); proxy.PasserObjet(_lstStr); }Le serveur ne se sent pas sollicité et reste stable.Une erreur s'est produite en tentant de sérialiser le paramètre. Le type 'System.Collections.Generic.List`1[System.String]' avec le nom de contrat de données 'ArrayOfstring' n'est pas attendu. Utilisez un DataContractResolver ou ajoutez tous les types non connus statiquement à la liste des types connus, par exemple en utilisant l'attribut KnownTypeAttribute.
Avez-vous une idée pour résoudre ce problème ? J'ai fait pas mal de recherches sur Internet, et je ne vois pas de solution...
Merci d'avance !
Partager