JSON增加最大对象数

时间:2014-07-29 13:30:12

标签: .net json web-services wcf fiddler

我有一个用C#.NET构建的WCF Web服务,它从SQL数据库返回许多记录(13k +),以JSON格式返回。我遇到了Web服务调用中返回的记录数量问题 - 问题似乎是对象的数量,而不是数据量。

我发现this answer on SO声称JSON返回中允许的最大“对象”数限制在65k左右。在返回我的13k +记录及其所有子属性(每个6个)后,我似乎超过了这个限制。如果我尝试调用我的服务并返回所有记录,我在Fiddler中得到以下错误标题:

HTTP/1.1 504 Fiddler - Receive Failure
Date: Tue, 29 Jul 2014 13:16:18 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-cache, must-revalidate

但是,如果我将SQL中的存储过程切换为仅返回TOP 10000,则一切正常,我的数据完美无缺。

如前所述,它似乎不是返回对象的大小 - 通过从TOP 10000返回的数据量进行扩展,我的完整结果集将大约为1.4-1.5 MB,并且我将web.config文件设置为允许最大JSON大小远远超过:

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="wellOver10GB" />
    ...

有没有其他人遇到太多对象的问题并找到了解决方案?有没有办法增加这个限制,或者我的问题可能与这个限制无关,实际上是我没有看到的其他东西?

1 个答案:

答案 0 :(得分:1)

需要调整属性ServiceBehaviorAttribute.MaxItemsInObjectGraph才能返回更多对象。这可以在WCF项目中以下列方式完成:

...
namespace _WSProjectName
{
    [ServiceBehavior(MaxItemsInObjectGraph = 1000000)] // Just did a million in my case, can be whatever you want to set it to
    public class ServiceName : IServiceName
    {
        ...

根据MSDN documentation on ServiceBehaviorAttribute.MaxItemsInObjectGraph

  

使用MaxItemsInObjectGraph属性设置对序列化对象图中项目数的限制。

文档说明默认值为 65,536 (2 ^ 16)