web-dev-qa-db-fra.com

Pourquoi WCF renvoie-t-il myObject [] au lieu de List <T> comme je m'y attendais?

Je renvoie une liste de ma méthode WCF. Dans mon code client, son type de retour s'affiche sous la forme MyObject []. Je dois utiliser MyObject [], ou IList, ou IEnumerable ...

WCFClient myClient = new WCFClient();

    MyObject[] list = myClient.GetMyStuff();
or
    IList<MyObject> list = myClient.GetMyStuff();
or
    IEnumerable<MyObject> list = myClient.GetMyStuff();

Tout ce que je fais, c'est prendre cette collection et la lier à une grille. Quel est le meilleur objet pour assigner ma collection retournée?

63
ScottG

Vous pouvez spécifier que vous souhaitez utiliser une liste générique au lieu d'un tableau en cliquant sur le bouton avancé lorsque vous ajoutez une référence, ou vous pouvez cliquer avec le bouton droit sur la référence de service et choisir de configurer pour la modifier en place.

La raison en est que WCF sérialise les listes génériques en tant que tableaux à envoyer sur le câble. La configuration indique simplement à svcutil de créer un proxy qui les reconvertira en une liste générique pour votre commodité.

83
Stever B

Lorsque vous utilisez svcutil.exe Pour créer votre code client, vous devez lui indiquer comment résoudre certaines références qui ne lui sont pas disponibles.

Voici comment vous le feriez pour List<T>:

svcutil /o:YourService.cs /ct:System.Collections.Generic.List`1 http://example.com/mex
13
Andrew Hare

Stever B a raison. WCF essaie vraiment de ne pas être couplé à .NET. Vous pouvez autoriser un client Java à se connecter à votre composant. Les tableaux sont interopérables. Les listes .NET génériques ne le sont pas.

Cependant, vous êtes plus que bienvenus pour créer votre propre classe proxy qui convertira le tableau en une liste ou tout autre élément que vous souhaitez. La bonne chose à propos de la création manuelle de vos propres proxys est que vous contrôlez complètement ce qu'ils font.

8
Tad Donaghe

Lorsque vous ajoutez la référence de service au projet client, cliquez sur le bouton avancé et changez le type de collection du tableau en ce que vous voulez qu'il soit ...

2
Jason Punyon