Escribo este artículo más bien para no olvidarme de este "detallito". Digo esto porque hoy lo olvidé durante un curso y además de pasar una incómoda media hora gasté el tiempo de mis alumnos (por suerte personas además de pilas, pacientes). Bueno, el escenario es este:
- Mi capa de datos es un mapa de LINQ to SQL. O sea que mis objetos de negocios son clases C# generadas por el Visual Studio
- Tengo una serie de métodos en la capa de negocios que hace cosas como TraerCategorias(), TraerProductos(int codigoCategoria), etc.
- Expongo estos métodos como servicios vía Windows Communication Foundation
- El cliente para estos servicios WCF revienta con un misterioso error "La conexión fue cerrada inesperadamente" (o algo así)
¿Por qué? (y por qué tienen que devolver un mensaje tan... "útil"). Al final, la solución es sencilla:
- Como bien se sabe al usar WCF (en realidad cualquier facilidad que mueva objetos de un proceso a otro) se debe serializar los objetos (o sea las categorías, productos, etc.). Y ojo: los objetos generados por LINQ to SQL por omisión *no* son serializables.
- Por suerte, es fácil cambiar ese comportamiento, basta con cambiar la opción SerializationMode de cada clase (Categoria, Producto) a Unidirectional y listo
Un gráfico vale más que varios párrafos de blog:

Como empecé diciendo, esto ya lo sabía, nomás que lo olvidé
. Espero que después de escribirlo no me vuelva a olvidar (y de pasito ojalá ayude a algún colega). Una explicación más detallada y completa la pueden encontrar en esta entrada del blog de Scott Lanford.
Enviado
10-16-2008 18:33
por
Edgar Sánchez