WCF WebInvoke响应是否有大小限制?

时间:2010-07-15 19:31:28

标签: c# wcf json rest

我的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'超过返回时,浏览器显示空响应。这一切都发生在一秒钟之内,所以我认为我没有任何超时。

基于此我认为我遇到了某种类型的缓冲区大小限制。有哪些限制,我将如何调整它们?

2 个答案:

答案 0 :(得分:6)

您可能正在运行DataContractJsonSerializer的MaxItemsInObjectGraph配额(每个单独的对象 - 如果您的阵列中有几个复杂类型,其中10k将很容易达到此限制)。您可以在this等行为配置中对其进行设置。

那就是说,我建议你研究一下传呼隐喻。没有人愿意等待所有这些东西一次性降下来。 :)

答案 1 :(得分:3)

在您的客户端web.config中,您可以通过在绑定上设置maxReceivedMessageSize属性来设置服务可以接收的最大大小:

<bindings>
  <webHttpBinding>
    <binding name="myWebHttpBinding" maxReceivedMessageSize="2000000" maxBufferSize="2000000">
    </binding>
  </webHttpBinding>
</bindings>

我相信这默认为65536,所以如果您的回复大于此,那可能是您的麻烦。

希望这会有所帮助!!