Ошибка DataContractSerializer с помощью Платформы Объекта 4.0 с WCF 4.0

Я пытаюсь получить список объектов от Платформы Объекта через WCF, но получаю следующее исключение:

Была ошибка при попытке сериализировать параметр http://tempuri.org/:GetAllResult. Сообщение InnerException было 'Типом 'Система. Данные. Объект. DynamicProxies. TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE' с данными сокращают имя 'TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE:http://schemas.datacontract.org/2004/07/System. Данные. Объект. DynamicProxies не ожидается. Рассмотрите использование DataContractResolver или добавьте, что любые типы, не известные статически списку известных типов - например, при помощи атрибута KnownTypeAttribute или путем добавления их к списку известных типов, передали DataContractSerializer'.. Дополнительную информацию см. в InnerException.

Я использовал WCF в прошлом, но никогда с Платформой Объекта. Я имею все свои объекты, сгенерированные через Платформу Объекта, и аннотируюсь [DataContract] и [DataMember] атрибуты. У меня нет Свойств Навигации ни на одном из моих объектов.

GetAll () называемый метод находится в классе реферативной службы:

[ServiceContract]
public interface IService
{
    [OperationContract]
    List GetAll();
}

И я использую ChannelFactory для вызова моей реализации:

Binding binding = new NetTcpBinding();
EndpointAddress endpointAddress = new EndpointAddress("net.tcp://localhost:8081/" + typeof(TestObjectService).Name);
using (ChannelFactory channel = new ChannelFactory(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();

При использовании отладки это находит объекты от базы данных, однако, это приводит возврат к сбою объектов.

Какие-либо идеи как, туда, где я могу идти не так, как надо?

56
задан Brandon 30 July 2010 в 15:20
поделиться

1 ответ

Разобраться в этом было непросто, но это происходит потому, что EntityFramework создает "прокси" вашего класса. Класс TestObject у меня был настроен правильно, но он создавал класс под названием: TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE

Чтобы заставить ChannelFactory + WCF + Entity Framework работать вместе, вы должны пойти в конструктор Context и добавить следующее:

ContextOptions.ProxyCreationEnabled = false;

Надеюсь, это поможет кому-нибудь еще.

90
ответ дан 26 November 2019 в 17:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: