Estoy intentando recuperar una lista de objetos de Entity Framework a través de WCF, pero estoy recibiendo la siguiente excepción:error DataContractSerializer utilizando Entity Framework 4.0 con WCF 4.0
Hubo un error al intentar serializar parámetro http://tempuri.org/:GetAllResult. El mensaje era InnerException 'Tipo 'System.Data.Entity.DynamicProxies.TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE' con el nombre de contrato de datos 'TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' no se espera. Considere usar un DataContractResolver o agregue cualquier tipo no conocido de forma estática a la lista de tipos conocidos, por ejemplo, utilizando el atributo KnownTypeAttribute o agregándolos a la lista de tipos conocidos pasados a DataContractSerializer. '. Por favor, consulte InnerException para más detalles.
He utilizado WCF en el pasado, pero nunca con Entity Framework. Tengo todas mis entidades generadas a través de Entity Framework y están anotadas con los atributos [DataContract] y [DataMember]. No tengo propiedades de navegación en ninguna de mis entidades.
métodoEl GetAll() se llama se encuentra en una clase de servicio abstracto:
[ServiceContract]
public interface IService<T>
{
[OperationContract]
List<T> GetAll();
}
y estoy usando el ChannelFactory a llamar a mi aplicación:
Binding binding = new NetTcpBinding();
EndpointAddress endpointAddress = new EndpointAddress("net.tcp://localhost:8081/" + typeof(TestObjectService).Name);
using (ChannelFactory<ITestObjectService> channel = new ChannelFactory<ITestObjectService>(binding, endpointAddress))
{
ITestObjectService testObjectService = channel.CreateChannel();
testObjects = testObjectService.GetAll();
channel.Close();
}
Estoy recibiendo como tal:
Type type = typeof(TestObjectService);
ServiceHost host = new ServiceHost(type,
new Uri("http://localhost:8080/" + type.Name),
new Uri("net.tcp://localhost:8081/" + type.Name));
host.Open();
Al usar la depuración, encuentra los objetos de la base de datos, sin embargo, es fai Ling devolviendo los objetos.
¿Alguna idea de dónde puedo estar yendo mal?
Esto me ayudó mucho gracias. Si tiene el problema descrito en esta pregunta, también vale la pena leer este http://stackoverflow.com/questions/4596371/what-are-the-downsides-to-turning-off-proxycreationenabled-for-ctp5-of-ef- code-f –
¡Muchas gracias por esa respuesta! – hupseb
Tuve que convertir mi DbContext a ObjectContext primero. En VB.NET, eso se ve como 'DirectCast (Me, IObjectContextAdapter) .ObjectContext.ContextOptions.ProxyCreationEnabled = False' – BlueMonkMN