【发布时间】: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