Проблема с WCF / EF 4.1 Ленивая загрузка - PullRequest
1 голос
/ 13 мая 2011

Я получаю данные для своего приложения через службу WCF. А на стороне сервера сервис использует EF4.1 в качестве доступа к данным. Сервисный метод выглядит примерно так:

public List<JobOffer> GetAllJobOffers()
{
    var allJobOffers = _jobOffersRepository.GetAll().ToList();
    return allJobOffers;
}

И хранилище сделано таким образом

public override IQueryable<JobOffer>GetAll()
{
    return _context.JobOffers.Include(c => c.Company);
}

Я получаю эту странную ошибку:

An error occurred while receiving the HTTP response to <a href="http://localhost:8080/JobsService/ws" rel="nofollow">http://localhost:8080/JobsService/ws</a>. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.

В режиме отладки после нажатия клавиши F5 цикл начинает работать бесконечно.

В моем случае это должна быть проблема с отложенной загрузкой на стороне сервера. Потому что, когда я звоню в службу, чтобы вернуть объекты с простой структурой, она работает как чемпион. Что может быть запутано? И как лучше всего загружать объекты с помощью EF?

Ответы [ 3 ]

5 голосов
/ 13 мая 2011

При использовании EF поверх WCF отложенная загрузка должна быть отключена, поскольку сериализация будет вызывать отложенную загрузку каждого свойства навигации. Другая проблема - циклические ссылки , которые по умолчанию не сериализуемы. Если ваш Company также имеет свойство навигации к своему Jobs, то он циклически ссылается.

0 голосов
/ 07 сентября 2013

Я знаю, что это немного старый вопрос, но, исходя из вашего опыта в вашем вопросе, я думаю, что это может помочь, если вы посмотрите одну из моих недавних публикаций http://sanderstechnology.com/2013/more-with-the-entity-framework-v6-rc1/12423/

Я расскажу, как отправлять полусложный граф объектов EF, десериализованный через WCF, и занимаюсь отложенной загрузкой, генерацией прокси и циклическими ссылочными проблемами. Возможно, стоит посмотреть.

0 голосов
/ 28 ноября 2011

Я думаю, что ваша проблема больше связана с циклическими отношениями. все это происходит, когда сериализация входит в сферу применения. Допустим, у вас есть сущность, у которой есть адреса свойств, помеченные как ленивые. с другой стороны взаимосвязи Адреса сущности имеет свойство навигации для сущности Персона. когда происходит сериализация, она проходит через каждое свойство сущности человека и при обращении к ней свойство навигации по адресам начинает загружать его. теперь он начинает сериализовать объект Address и, получая доступ к свойству навигации Person, возвращается к этому свойству и начинает его сериализацию, создавая ситуацию, когда циклическая сериализация начинается и не может быть завершена. Чтобы преодолеть эту проблему, вам не нужно поворачивать ленивую загрузку, но все, что вам нужно сделать, это украсить ваш datacontract (в данном случае Person и Addresse) с помощью [DataContract (IsReference = true)], и все работает как шарм.

...