【问题标题】:WCF method throws an exception of maximum items in an object graph is '65536'WCF 方法抛出对象图中最大项目的异常是“65536”
【发布时间】:2011-04-06 07:13:25
【问题描述】:

返回的对象太多时出现异常:

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://.../Contract:GetBlaBlaResult 时出错。 InnerException 消息是“对象图中可以序列化或反序列化的最大项目数为“65536”。更改对象图或增加 MaxItemsInObjectGraph 配额。 '。有关更多详细信息,请参阅 InnerException。

我查了一下,在服务端的行为下添加了:

<behaviors>
   <serviceBehaviors>
      <behavior name="MyServiceBehavior">
         <dataContractSerializer maxItemsInObjectGraph="2147483646"/>

        ...

在客户端:

<behaviors>
   <endpointBehaviors>
       <behavior name="maxItems">
          <dataContractSerializer maxItemsInObjectGraph="2147483646" />
       </behavior>
   </endpointBehaviors>
</behaviors>

但似乎被忽略了,异常不断出现。

问题是我使用 XmlSerializer(用于元素中的属性):

[ServiceContract(Namespace = "http://BlaBla.com/webservices/BlaBlaService")]
[XmlSerializerFormat(SupportFaults = true)]
public interface IBlaBlaServices
{
    [OperationContract]
    BlaBlaResponse GetBlaBla(BlaBlaRequestMessage searchBlaBlaRequest);
}

如您所见,例外是指 dataContractSerializer(我在上面添加的配置也是如此)。

是不是 XmlSerializer 搞砸了?

有人可以建议吗?

非常感谢:)

【问题讨论】:

标签: wcf datacontractserializer xmlserializer servicebehavior


【解决方案1】:

只是为了确保,您是否将 MyServiceBehavior 行为应用于服务配置中的服务定义,并将 maxItems 行为应用于客户端配置中的端点定义(behaviorConfiguration 属性)?

【讨论】:

  • 是的,虽然在我看来这很奇怪,因为它应该是跨平台的,而且告诉客户端如何配置其侧面的想法看起来很尴尬。
  • 是的,确实有点尴尬。如果您应用 ServiceBehavior 属性来设置 MaxItemsInGraph 是否有效? [ServiceBehavior(MaxItemsInObjectGraph = 2147483646)](关于服务实现,而不是合同)。
  • 感谢 Jeffn825 的关注 :) 设置行为毕竟是解决方案,而 XmlSerializer 与问题无关。我只是把行为名称弄错了......
  • 添加 dataContractSerializer 元素并增加对我的行为/服务行为/行为的限制对我有用。
猜你喜欢
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2011-11-20
  • 2014-05-23
  • 2012-01-24
  • 1970-01-01
相关资源
最近更新 更多