在WCF中反序列化对象时出错

时间:2011-04-04 11:27:47

标签: wcf serialization rest

我在WCF中创建了一个REST服务。我正面临以下问题

  

反序列化System.Collections.Generic.IList类型的对象时出错。已超出最大读取深度(32),因为正在读取的XML数据具有比配额允许的更多嵌套级别。通过更改创建XML阅读器时使用的XmlDictionaryReaderQuotas对象的MaxDepth属性,可以增加此配额。

我没有在配置中指定任何类型的绑定,因为我根据REST Starter Kit开发了服务。请告诉我如何解决它。

代码工作正常,但确实会引发错误。

4 个答案:

答案 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 supportedASP.NET Web API或任何其他最新的REST框架。

答案 3 :(得分:0)

我今天遇到了同样的问题。如果您未在数据协定中正确设置KnowType和IsReference,则它可以是循环引用。 先检查这些要点。真的!

但是当你面对这种行为时。

有时候代码运行正常,但确实会抛出错误。

您还应该检查您在线上发送的图表是否深度和复杂(例如深度超过两个导航属性)。那么它可能只是绑定配置中的ReaderQuotas的MaxDepth太低了。当您最深的导航属性为空时,您的服务会起作用,但当它们包含至少一个元素时会抛出此错误。

此配置的默认值为32,因此请尝试64。

现在我们可以争论在服务上使用过多的深度图与在WCF配置中使用低默认值的低质量设计。

我并不是说你必须在较小的部分打破你的图表,但你应该。