以编程方式设置MaxItemsInObjectGraph

时间:2011-01-06 06:37:33

标签: c# .net wcf bigdata

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

  

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

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

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

3 个答案:

答案 0 :(得分:5)

在代码中:

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>

答案 1 :(得分:4)

答案 2 :(得分:2)

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

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 
{
   [OperationContract] 
   DataPoint[] GetData(); 
}