2009-11-20 16 views
11

¿Existe alguna recomendación oficial sobre el uso de estructuras como tipos de devolución con los servicios de WCF?Uso de estructuras con servicios de WCF

Actualmente estoy interactuando con un servicio que no escribí y me inspiro para preguntar si mi molestia está justificada.

tengo en el pasado de clases siempre utilizados - probablemente en parte porque eso es lo que muestras siempre muestran sino como lo pienso ahora, por otras razones "intuitivos":

  • empecé contrato estilo definiendo un proyecto separado con interfaces que representan los tipos que pasarían por el servicio.

  • Utilizo LINQ mucho, por lo que las pruebas de nulabilidad están implícitas con los tipos de referencia, mientras que con las estructuras y otros tipos de valores, siempre tengo que marcar las anotaciones.

Esas son algunas que se me ocurren de inmediato, aunque admitiré que es más intuitivo que una lista con viñetas en mi mente. Pensé que hacer la pregunta porque estoy tratando con un servicio que devuelve estructuras y tener que escribir cuando se trata de valores de retorno:

var foo = Bar.Value.MyField; 

en lugar de

var foo = Bar.Value; 
+0

@David: actualicé mi respuesta con algunas consideraciones adicionales –

Respuesta

17

Si usted puede crear una estructura y ponle un atributo [DataContract] - adelante y úsalo! Para WCF, eso no hace la diferencia: WCF solo requiere que la clase o estructura en uso marcada con un atributo DataContract y todos los campos que se incluirán en el mensaje serializado se marquen con un atributo [DataMember].

Si comprueba la documentación de MSDN en la DataContractAttribute, muestra que se puede usar en una estructura así:

[AttributeUsageAttribute(AttributeTargets.Class| 
AttributeTargets.Struct|AttributeTargets.Enum, 
Inherited = false, AllowMultiple = false)] 
public sealed class DataContractAttribute : Attribute 

ACTUALIZACIÓN: En cuanto a cuándo utilizar una estructura en lugar de una clase (en general , en .NET), vea este SO pregunta aquí:

When should I use a struct instead of a class?

Sin embargo, desde WCF es realmente sobre el paso de mensajes (es decir, el cliente realiza una llamada a un método, esa llamada y sus parámetros se convierten en un mensaje serializado eso se pone sen t a través del cable y luego reensamblado en el otro extremo y se volvió a llamar a un método), no veo ninguna razón de peso para usar un struct.

Todos los beneficios de .NET en general no se aplican realmente en el mundo SOA de WCF, diría (no está pasando por instancias de clase o de estructura, véase más arriba).

+0

Mi pregunta era menos acerca de si se podía hacer y más en busca del contexto cuando era apropiado. – t3rse

+0

A primera vista veo la razón para usar estructuras para DTO: menos presión en GC, cuando la vida de DTO es muy corta y la instancia no puede reunir muchos beneficios al ser del tipo ref. Pero depende de las partes internas de WCF. –

Cuestiones relacionadas