我在客户端和服务器端使用WCF的应用程序。当我返回大量数据时出错:
尝试序列化参数http://tempuri.org/:GetCurrentDatabaseObjectsResult时出错。 InnerException消息是'对象图中可以序列化或反序列化的最大项数是'65535'。更改对象图或增加MaxItemsInObjectGraph配额。 ”。有关详细信息,请参阅InnerException。
(最重要的是我要增加MaxItemsInObjectGraph)。
我在这里发现了这篇文章:How can I set the maxItemsInObjectGraph property programmatically from a Silverlight Application?但似乎这只适用于客户端,我需要在服务器上执行此操作。
答案 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)
转到“控制序列化过程”标题(或搜索maxItemsInObjectGraph)
答案 2 :(得分:2)
您想在ServiceBehavior属性中指定属性。
[ServiceContract]
[ServiceBehavior(MaxItemsInObjectGraph=100000)]
public interface IDataService
{
[OperationContract]
DataPoint[] GetData();
}