Ошибка при десериализации объекта в WCF - PullRequest
3 голосов
/ 04 апреля 2011

Я создал службу REST в WCF. Я сталкиваюсь со следующей проблемой

Произошла ошибка при десериализации объекта типа System.Collections.Generic.IList. Максимальная глубина чтения (32) была превышена, так как считываемые данные XML имеют больше уровней вложенности, чем разрешено квотой. Эту квоту можно увеличить, изменив свойство MaxDepth объекта XmlDictionaryReaderQuotas, используемого при создании средства чтения XML.

Я не указал какой-либо тип привязки в конфигурации, так как разработал службу в соответствии с REST Starter Kit. Пожалуйста, предложите что-нибудь о том, как я могу это исправить.

Иногда код работает нормально, но выдает ошибку.

Ответы [ 4 ]

6 голосов
/ 07 декабря 2011

В моем случае проблема заключалась в том, что я возвращал объекты Entity Framework, полученные из контекста данных.Решение состояло в том, чтобы отсоединить каждый объект, прежде чем перенастроить его.

1 голос
/ 10 апреля 2014

В моем случае отсоединение объектов было невозможно, поскольку контекст EF уже был удален.

Вместо этого я использовал метод расширения AsNotTracking.

... В некоторых других случаях мне также приходилось обрезать круговые ссылки, задав для некоторых свойств навигации значение null.

... И DataContract(IsReference = true) не добились цели.

Более подробную информацию по этой проблеме можно найти здесь: N-уровень Entity Framework и отладка проблем WCF

0 голосов
/ 12 июля 2017

У меня была такая же проблема сегодня.Это может быть циклическая ссылка, если вы неправильно указали KnowType и IsReference в контракте на данные. Сначала проверьте эти точки.Действительно!

Но когда вы сталкиваетесь с таким поведением.

Код иногда работает нормально, но выдает ошибку.

Вы также должны проверить, является ли график, который вы посылаете по проводам, глубоким и сложным (например, более двух глубин навигационных свойств).Тогда это может быть просто MaxDepth из ReaderQuotas в вашей конфигурации привязки, который слишком низок.Ваша служба будет работать, когда ваши самые глубокие навигационные свойства пусты, но выдает эту ошибку, если они содержат хотя бы один элемент.

Значение по умолчанию для этой конфигурации - 32, поэтому попробуйте 64.

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

Я не говорю, что вы должны разбить свой график на меньшую часть, но вы должны.

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