我们的WCF服务的一种方法会在生产环境中抛出异常:
格式化程序在尝试反序列化消息时抛出异常:有一个 尝试反序列化参数http:// our_schema:GetSomeListResult时出错。该 InnerException消息是'可以序列化的最大项目数或 在对象图中反序列化为'65536'。更改对象图或增加 MaxItemsInObjectGraph quota。
方法GetSomeList返回一个对象列表(15个属性 - 整数,枚举,字符串,DateTimes),它有大约6k个元素。但是,相同的服务配置不会在我的本地计算机和测试环境中导致此错误。 我知道如何修复此错误:
<behavior name="basicEndpointBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
但我不明白它的性质。
那么序列化/反序列化数组中的实际对象数是多少? List.Count? List.Count *(属性数量)?如果公式是List.Count *(属性数),则对象数= 6k * 15 = 90k,大于65536.为什么此方法调用在本地使用相同大小的数组工作正常?
答案 0 :(得分:2)
对象的数量 - 即需要序列化的事物的实例数。如果列表中对象的所有属性只返回一个原始对象,则该数字应为List.Count * (number of properties + 1)
(列表中的每个项目都是一个对象,而项目的每个属性都是另一个)。
如果您将EmitDefaultValue
设置为false
,则该数字可能会显着降低,但您可能没有这样做。
至于为什么本地行为可能与生产不同,我看到串行器配置仅适用于HTTP的情况,你必须为HTTPS单独设置它;这可能是问题吗?