Sto tentando di recuperare un elenco di oggetti da Entity Framework tramite WCF, ma sto ricevendo la seguente eccezione:DataContractSerializer errore utilizzando Entity Framework 4.0 con WCF 4.0
C'è stato un errore durante il tentativo di serializzare parametro http://tempuri.org/:GetAllResult. Il messaggio era InnerException 'Tipo 'System.Data.Entity.DynamicProxies.TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE' con il nome del contratto di dati 'TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' non è previsto. Prendi in considerazione l'utilizzo di DataContractResolver o aggiungi staticamente i tipi non noti all'elenco dei tipi noti, ad esempio utilizzando l'attributo KnownTypeAttribute o aggiungendoli all'elenco dei tipi noti passati a DataContractSerializer. '. Si prega di consultare InnerException per maggiori dettagli.
ho usato WCF in passato, ma mai con Entity Framework. Ho tutte le mie entità generate tramite Entity Framework e sono annotate con gli attributi [DataContract] e [DataMember]. Non ho proprietà di navigazione su nessuna delle mie entità.
Il GetAll() metodo chiamato è in una classe di servizio astratta:
[ServiceContract]
public interface IService<T>
{
[OperationContract]
List<T> GetAll();
}
e sto usando il ChannelFactory chiamare la mia realizzazione:
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();
}
Sto ospitando come tale:
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();
Quando si utilizza il debug, trova gli oggetti dal database, tuttavia, è fai ling restituendo gli oggetti.
Qualche idea su dove potrei andare storto?
Questo mi ha aiutato molto, grazie. Se hai il problema descritto in questa domanda vale la pena leggere questo http://stackoverflow.com/questions/4596371/what-are-the-downsides-to-turning-off-proxycreationenabled-for-ctp5-of-ef- code-f –
Grazie mille per la risposta! – hupseb
Ho dovuto eseguire il cast del mio DbContext su un ObjectContext. In VB.NET, appare come 'DirectCast (Me, IObjectContextAdapter) .ObjectContext.ContextOptions.ProxyCreationEnabled = False' – BlueMonkMN