2009-02-27 9 views

Respuesta

13

nota: Estoy respondiendo esto desde la perspectiva del cliente - es decir, el interruptor /collectionType:<type> en svcutil.exe (también disponible en el IDE).

Personalmente, tiendo a mantenerlo simple y usar List<T>. Si vas a hacer un montón de enlace de datos, BindingList<T> podría ser una opción, pero para las propiedades de los objetos suele ser excesiva. Las matrices hacen la vida muy difícil ... evítelas ;-p

Tenga en cuenta que con .NET 3.5 las características disponibles para cada tipo de colección se difuminan, gracias a los métodos de extensión en Enumerable.

Normalmente, Collection<T> es útil cuando cree que es posible que desee crear una subclase de la colección para utilizar los puntos de extensión virtual. Esto no es realmente una opción con WCF.

Como ya se indicó, el uso de IList<T>, etc. no es una opción a menos que esté utilizando el ensamblaje compartido, ya que la clase generada no podrá crear la colección.

1

No se puede usar el tipo de interfaz en el contrato de datos porque el serializador no funcionará con las propiedades del tipo de interfaz.

Puede usar el tipo concreto, p. Ej. MyClass [] o List

+0

¿Qué tipo es mejor usar cuando? – JacobE

0

Además del hecho de que no puede usar tipos de interfaz, en realidad no importa cuál de los tipos de colección utiliza. El cliente de tu servicio nunca los verá.

Recuerde que los servicios web brindan una descripción del servicio al cliente en términos de WSDL o mex. En el caso de WSDL, el cliente recibirá un esquema XML que describe los mensajes que se enviarán y recibirán. En el caso de una colección, el cliente simplemente verá un elemento con un maxOccurs = "ilimitado" en lugar de uno con maxOccurs = "1". El cliente puede interpretar esto como una matriz, lista o lo que sea. No importa qué colección regrese de su servicio, el cliente verá maxOccurs = "ilimitado" e interpretará como quiera.

La excepción sería devolver un diccionario de algún tipo, y no sé cómo funciona.

Cuestiones relacionadas