2011-05-02 13 views
10

He estado intentando desde hace algunos días encontrar una respuesta concreta a por qué los tipos de IEnumerable causan errores extraños al utilizarlos como tipos de devolución en los contratos de operación.Problema con el uso de tipos de IEnumerable como tipos de devolución en WCF

Encontré muchos artículos y publicaciones de foros pero lo que tengo hasta ahora es cómo prevenir errores con otras soluciones alternativas como una matriz de objetos o una Lista de lista genérica.

Me gustaría que los miembros de la comunidad sugieran publicaciones más relevantes o cualquier material de referencia que explique este comportamiento de WCF.

Respuesta

21

WCF utiliza un sistema de paso de mensajes: serializa llamadas y devuelve valores en mensajes XML serializados.

Como tal, solo puede tratar cosas que se pueden expresar en el esquema XML, y las interfaces no se pueden expresar en el esquema XML.

Intente utilizar un tipo de hormigón (un List<T> o un conjunto) en su lugar, estos deberían funcionar bien.

Hay algunas maneras de evitar esto - pero sacrificar cualquier interoperabilidad con los clientes non-.NET en el proceso: se puede utilizar el NetDataContractSerializer (ver this blog post y la article by Aaron Skonnard on NetDataContractSerializer); con esto, básicamente incrusta información de tiempo de ejecución de .NET adicional en sus mensajes serializados. Esto hará que sus mensajes sean más grandes, y cualquier cliente que no sea .NET no entenderá esto, pero si usted está controlando ambos extremos del cable y ambos extremos son solo .NET, entonces esto podría funcionar como una solución alternativa.

Esto también admite el uso de interfaces como los parámetros de su método de servicio; sin embargo, no estoy seguro acerca de los tipos de devolución.

Normalmente, no lo recomiendo, pero dependiendo de su situación y sus necesidades, esta podría ser una alternativa para usted. ¡Echale un vistazo!

+1

gracias por esa buena explicación. ¡Eso lo resume! –

+1

Explicación clara ... – Jowen

Cuestiones relacionadas