我在WCF中创建了一个REST服务。我正面临以下问题
反序列化System.Collections.Generic.IList类型的对象时出错。已超出最大读取深度(32),因为正在读取的XML数据具有比配额允许的更多嵌套级别。通过更改创建XML阅读器时使用的XmlDictionaryReaderQuotas对象的MaxDepth属性,可以增加此配额。
我没有在配置中指定任何类型的绑定,因为我根据REST Starter Kit开发了服务。请告诉我如何解决它。
代码工作正常,但确实会引发错误。
答案 0 :(得分:6)
就我而言,问题是我正在返回从数据上下文中获取的Entity Framework对象。解决方法是在重新调整它们之前分离每个对象。
答案 1 :(得分:1)
在我的情况下,由于EF上下文已被处理,因此无法分离对象。
相反,我使用了AsNotTracking
扩展方法。
...在其他一些情况下,我还必须通过将一些导航属性设置为null来剪切循环引用。
...... DataContract(IsReference = true)
没有做到这一点。
有关此问题的更多详细信息,请访问:N-tier Entity Framework and debugging WCF problems
答案 2 :(得分:0)
REST Starter Kit is no longer supported和ASP.NET Web API或任何其他最新的REST框架。
答案 3 :(得分:0)
我今天遇到了同样的问题。如果您未在数据协定中正确设置KnowType和IsReference,则它可以是循环引用。 先检查这些要点。真的!
但是当你面对这种行为时。
有时候代码运行正常,但确实会抛出错误。
您还应该检查您在线上发送的图表是否深度和复杂(例如深度超过两个导航属性)。那么它可能只是绑定配置中的ReaderQuotas的MaxDepth太低了。当您最深的导航属性为空时,您的服务会起作用,但当它们包含至少一个元素时会抛出此错误。
此配置的默认值为32,因此请尝试64。
现在我们可以争论在服务上使用过多的深度图与在WCF配置中使用低默认值的低质量设计。
我并不是说你必须在较小的部分打破你的图表,但你应该。