以编程方式设置 MaxItemsInObjectGraph

Posted

技术标签:

【中文标题】以编程方式设置 MaxItemsInObjectGraph【英文标题】:Programmatically set the MaxItemsInObjectGraph 【发布时间】:2011-01-06 06:37:33 【问题描述】:

我有一个在客户端和服务器端使用 WCF 的应用程序。返回大量数据时出现错误:

尝试序列化参数http://tempuri.org/:GetCurrentDatabaseObjectsResult 时出错。 InnerException 消息是“对象图中可以序列化或反序列化的最大项目数为“65535”。更改对象图或增加 MaxItemsInObjectGraph 配额。 '。有关详细信息,请参阅 InnerException。

(最重要的是我必须增加 MaxItemsInObjectGraph)。

我在这里找到了这篇文章:How can I set the maxItemsInObjectGraph property programmatically from a Silverlight Application?,但似乎这仅适用于客户端,我需要在服务器上执行此操作。

【问题讨论】:

【参考方案1】:

在代码中:

foreach (OperationDescription op in factory.Endpoint.Contract.Operations)

    DataContractSerializerOperationBehavior dataContractBehavior =
                op.Behaviors.Find<DataContractSerializerOperationBehavior>()
                as DataContractSerializerOperationBehavior;
    if (dataContractBehavior != null)
    
        dataContractBehavior.MaxItemsInObjectGraph = 100000;
    

在配置中:

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaivor">
      <serviceAuthorization impersonateCallerForAllOperations="True" />
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="2147483647" />
      <dataContractSerializer maxItemsInObjectGraph="65775" />
    </behavior>
  </serviceBehaviors>
</behaviors>

【讨论】:

【参考方案2】:

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/specifying-data-transfer-in-service-contracts#controlling-the-serialization-process

转到“控制序列化过程”标题(或搜索 maxItemsInObjectGraph)

【讨论】:

事实上我已经是一个自定义序列化器(用于管理循环引用),它将 MaxItemsInObjectGraph 设置为默认值,因为它必须给它。我增加了它,现在它正在工作。谢谢【参考方案3】:

您想在 ServiceBehavior 属性中指定属性。

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 

   [OperationContract] 
   DataPoint[] GetData(); 

【讨论】:

ServiceBehavior 属性在实现类上,而不是在接口上。

以上是关于以编程方式设置 MaxItemsInObjectGraph的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式打开 Android 设置

如何以编程方式设置 UITableView 的高度

为啥我们不能在以编程方式设置初始视图控制器时以编程方式在视图控制器之间跳转?

以编程方式设置 UITabBar 标题

无法以编程方式将样式设置为 LinearLayout

如何以编程方式设置scrollview高度