Quel type liste / collection est préférable d'utiliser dans un contrat de données WCF?

StackOverflow https://stackoverflow.com/questions/594499

  •  09-09-2019
  •  | 
  •  

Question

Lors de la définition d'un contrat de données WCF, quel type doit-on utiliser pour les collections / listes?

  • Faut-il être ICollection , IList , T [] ou ...?
  • Dois-je utiliser les types d'interface ou les types concrets?
  • Quels compromis sont là pour prendre en compte?
Était-ce utile?

La solution

Note:. Je réponds à cela de la du client perspective - à savoir le commutateur de /collectionType:<type> sur svcutil.exe (également disponible dans l'EDI)

Personnellement, je tends à le garder simple et utiliser List<T>. Si vous allez faire beaucoup de liaison de données, BindingList<T> pourrait ê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 ... éviter les ;-P

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

Normalement, Collection<T> est utile lorsque vous pensez que vous voudrez peut-être sous-classe la collection à utiliser les points d'extension de virtual. Ce n'est pas vraiment une option avec WCF.

Comme nous l'avons dit, l'utilisation IList<T> etc ne sont pas une option à moins que vous utilisez le partage d'assemblage, car la classe générée ne sera pas en mesure de créer la collection.

Autres conseils

Vous ne pouvez pas utiliser le type d'interface DataContract parce que le sérialiseur ne fonctionnera pas avec les propriétés du type d'interface.

Vous pouvez utiliser par exemple le type de béton MyClass [] Liste

Mis à part le fait que vous ne pouvez pas utiliser les types d'interface, il ne compte pas vraiment quels types de collecte que vous utilisez. Le client de votre service ne sera jamais les voir.

Rappelez-vous que les services Web offrent un descriptionj du service au client en termes de WSDL ou MEX. Dans le cas de WSDL, le client recevra un schéma XML décrivant les messages à être envoyés et reçus. Dans le cas d'une collection, le client voit tout simplement un élément avec un maxOccurs = « unbounded » au lieu d'un avec maxOccurs = « 1 ». Le client peut interpréter cela comme un tableau ou une liste, ou autre chose. Quelle que soit la collection que vous revenez de votre service, le client verra maxOccurs = « unbounded » et l'interpréter comme il aime.

L'exception retournerait un dictionnaire de quelque sorte, et je ne sais pas comment cela fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top