我的WCF Web服务定义如下
[OperationContract]
[WebInvoke(
Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "Assets/{assetId}/Reports/{startDate}/{endDate}")]
JQGridDataStore<Report> GetReportsForAssetFilterByDate(string assetId, string startDate, string endDate);
当我的JQGridDataStore包含数千个Report实例时,我没有遇到任何响应。但是,数据存储超过10,000个报告,我在浏览器中收到以下信息:
错误324(net :: ERR_EMPTY_RESPONSE):未知错误。
我逐步完成了服务的实现,我可以看到它没有任何例外。完全创建JQGridDataStore对象并使用我的10,000 + Report实例进行填充。但是,当我'F10'超过返回时,浏览器显示空响应。这一切都发生在一秒钟之内,所以我认为我没有任何超时。
基于此我认为我遇到了某种类型的缓冲区大小限制。有哪些限制,我将如何调整它们?
答案 0 :(得分:6)
您可能正在运行DataContractJsonSerializer的MaxItemsInObjectGraph配额(每个单独的对象 - 如果您的阵列中有几个复杂类型,其中10k将很容易达到此限制)。您可以在this等行为配置中对其进行设置。
那就是说,我建议你研究一下传呼隐喻。没有人愿意等待所有这些东西一次性降下来。 :)
答案 1 :(得分:3)
在您的客户端web.config中,您可以通过在绑定上设置maxReceivedMessageSize属性来设置服务可以接收的最大大小:
<bindings>
<webHttpBinding>
<binding name="myWebHttpBinding" maxReceivedMessageSize="2000000" maxBufferSize="2000000">
</binding>
</webHttpBinding>
</bindings>
我相信这默认为65536,所以如果您的回复大于此,那可能是您的麻烦。
希望这会有所帮助!!