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 :
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 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
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);
}
Dans ce cas par contre, le programme client plante et me renvoie une exception qui ressemble à cela :
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.
Le serveur ne se sent pas sollicité et reste stable.


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 !