StackOverflowException пытается вернуть результат запроса Linq в виде списка через службу WCF - PullRequest
3 голосов
/ 06 апреля 2011

У меня было много проблем с этим материалом, и я не могу решить его даже на более простом примере.

У меня есть служба WCF, которая возвращает список объектов (из моей модели сущности).

Модель имеет только 2 таблицы: Персона, с идентификатором, именем и office_id (внешний ключ) и офис, с идентификатором и адресом

Я делаю действительно простой запрос linq, который возвращает первого из этих людей. Это работает нормально, даже метод "ToList ()" работает нормально.

Проблема заключается в том, что при попытке вернуть его через службу происходит сбой с «Необработанным исключением типа« System.StackOverflowException », возникшим в mscorlib.dll»

Я думаю, это связано со свойствами навигации, когда он пытается сериализовать объект Person. Эти свойства навигации отображаются как в модели Person, так и в модели Office, таблица Person имеет свойство навигации "Office", но таблица Office также имеет свойство навигации "Person" !!

Я думаю, что эти свойства навигации могут быть полезны для других сценариев, но я не могу найти способ не загружать это содержимое или, по крайней мере, не сериализовать и не возвращать его через службу !!

Это запрос linq (работает, в списке действительно один человек):

var query = (from chosen in entities.person
            select chosen).First<person>();

return query.ToList<person>();

Кто-нибудь когда-нибудь видел что-то подобное? У меня было несколько проектов WCF-Linq и у меня никогда не было подобных проблем.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 06 апреля 2011

Похоже, у вас есть проблема с циклической ссылкой, попробуйте украсить свой класс Person и Office:

[DataContract(IsReference = true)]
3 голосов
/ 07 апреля 2011

Наконец, я решил это, установив ProxyCreationEnabled и LazyLoadingEnabled как false в объекте entity:

Model.Entities entities = new Model.Entities();

        public ServicePeople()
        {
            entities.ContextOptions.ProxyCreationEnabled = false;
            entities.ContextOptions.LazyLoadingEnabled = false;
        }
1 голос
/ 06 апреля 2011

Предполагая, что ваша служба WCF использует значение по умолчанию DataContractSerializer, попробуйте украсить свойства навигации с помощью IgnoreDataMemberAttribute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...