2009-02-27 7 views

Répondre

13

Note: Je réponds à ce du point de vue du client - à savoir le commutateur /collectionType:<type> sur svcutil.exe (également disponible dans l'IDE).

Personnellement, j'ai tendance à rester simple et à utiliser List<T>. Si vous allez faire beaucoup de liaison de données, BindingList<T> peut être une option, mais pour les propriétés de l'objet, il est généralement exagéré. Les tableaux rendent la vie très difficile ... évitez-les ;-p

Notez qu'avec .NET 3.5 les fonctionnalités disponibles pour chaque type de collection floutent, grâce aux méthodes d'extension sur Enumerable.

Normalement, Collection<T> est utile lorsque vous pensez que vous pourriez vouloir sous-classer la collection pour utiliser les points d'extension virtual. Ce n'est pas vraiment une option avec WCF.

Comme déjà indiqué, l'utilisation de IList<T> etc n'est pas une option sauf si vous utilisez le partage d'assembly, car la classe générée ne pourra pas créer la collection.

1

Vous ne pouvez pas utiliser le type d'interface dans le contrat de données car le sérialiseur ne fonctionnera pas avec les propriétés de type d'interface.

Vous pouvez utiliser le type de béton, par ex. MyClass [] ou la liste

+0

Quel type est le meilleur à utiliser quand? – JacobE

0

Mis à part le fait que vous ne pouvez pas utiliser les types d'interface, peu importe le type de collection que vous utilisez. Le client de votre service ne les verra jamais. Rappelez-vous que les services Web fournissent une description du service au client en termes de WSDL ou de mex. Dans le cas de WSDL, le client recevra un schéma XML décrivant les messages à envoyer et à recevoir. Dans le cas d'une collection, le client verra simplement un élément avec un maxOccurs = "unbounded" au lieu d'un avec maxOccurs = "1". Le client peut interpréter ceci comme un tableau, une liste ou quoi que ce soit. Quelle que soit la collection que vous retournez de votre service, le client verra maxOccurs = "unbounded" et l'interprétera comme il le souhaite.

L'exception serait de renvoyer un dictionnaire quelconque, et je ne sais pas comment cela fonctionne.

Questions connexes