4

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

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

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

我在这里找到了这篇文章:如何从 Silverlight 应用程序以编程方式设置 maxItemsInObjectGraph 属性?但似乎这仅适用于客户端,我需要在服务器上执行此操作。

4

3 回答 3

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>
于 2011-01-06T08:40:57.200 回答
4

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

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

于 2011-01-06T06:44:07.863 回答
2

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

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 
{
   [OperationContract] 
   DataPoint[] GetData(); 
}
于 2012-01-26T06:17:36.000 回答