Я пытаюсь получить список объектов из Entity Framework через WCF, но я получаю следующее исключение:DataContractSerializer Ошибка с помощью Entity Framework 4.0 с WCF 4.0
Была ошибку при попытке сериализовать параметр http://tempuri.org/:GetAllResult. Сообщение InnerException был «Type„System.Data.Entity.DynamicProxies.TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE“с именем контракта данных„TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies“не ожидается. Подумайте об использовании DataContractResolver или добавьте любые типы, не известные статически в список известных типов - например, с помощью атрибута KnownTypeAttribute или путем добавления их в список известных типов, переданных DataContractSerializer. '. Дополнительную информацию см. В InnerException.
Я использовал WCF в прошлом, но никогда не использовал Entity Framework. У меня есть все мои сущности, созданные через Entity Framework, и аннотируются с атрибутами [DataContract] и [DataMember]. У меня нет свойств навигации ни на одном из моих объектов.
методGETALL() вызывается в абстрактном классе обслуживания:
[ServiceContract]
public interface IService<T>
{
[OperationContract]
List<T> GetAll();
}
И я использую ChannelFactory назвать мою реализацию:
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();
}
Я хостинг это так:
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();
При использовании отладки он находит объекты из базы данных, однако, это fai возвращая объекты.
Любые идеи относительно того, где я могу ошибиться?
Это очень помогло мне. Если у вас есть проблема, описанная в этом вопросе, также стоит прочитать этот http://stackoverflow.com/questions/4596371/what-are-the-downsides-to-turning-off-proxycreationenabled-for-ctp5-of-ef- code-f –
Большое спасибо за этот ответ! – hupseb
Мне пришлось сначала передать свой DbContext в ObjectContext. В VB.NET это выглядит как DirectCast (Me, IObjectContextAdapter) .ObjectContext.ContextOptions.ProxyCreationEnabled = False' – BlueMonkMN