63 votes

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

Je renvoie une liste à partir de ma méthode WCF. Dans mon code client, le type de retour est indiqué comme MyObject[]. Je dois utiliser soit MyObject[], soit IList, soit 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 à affecter à la collection que je retourne ?

83voto

Stever B Points 2657

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 faire un clic droit sur la référence du service et choisir de la configurer pour la modifier en place.

La raison est que WCF sérialise les listes génériques comme des tableaux pour envoyer à travers le fil. La configuration indique simplement à svcutil de créer un proxy qui les reconvertit en liste générique pour votre confort.

13voto

Andrew Hare Points 159332

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 accessibles.

Voici comment vous devez procéder pour List<T> :

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

8voto

Tad Donaghe Points 5331

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

Cependant, vous pouvez tout à fait créer votre propre classe proxy qui reconvertira le tableau en liste ou en tout autre élément de votre choix. L'avantage de la création manuelle de vos propres classes proxy est que vous avez un contrôle total sur leurs actions.

2voto

Jason Punyon Points 21244

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X