【问题标题】:JSON Increase Maximum Number of ObjectsJSON 增加最大对象数
【发布时间】:2014-07-29 13:30:12
【问题描述】:

我有一个用 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" />
    ...

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

【问题讨论】:

  • 您可能需要在 IIS 中调整限制。强烈推荐 Newtonsoft JSON 解析器。另外,请参阅此页面:ziggytech.net/technology/web-development/…
  • @lcryder 在 IIS 中调整什么限制?我没有看到任何我可以调整的东西。解析 JSON 不是问题,因为它甚至一开始都没有被接收到。
  • 我指的是 IIS 的这个区域(它可能不适用)。 iis.net/configreference/system.webserver/security/…
  • @lcryder 不幸的是,它不适用。该部分处理从客户端发送的 request 的最大值,而不是发回的 response
  • @lcryder 如果您仍然好奇,我找到了一个解决方案 - 最终成为需要在 WCF 项目中设置的东西。

标签: .net json web-services wcf fiddler


【解决方案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)

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 2010-12-05
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多