我有一个用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" />
...
有没有其他人遇到太多对象的问题并找到了解决方案?有没有办法增加这个限制,或者我的问题可能与这个限制无关,实际上是我没有看到的其他东西?
答案 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)