2010-07-15 81 views
3

我定义为一个WCF Web服务如下在WCF WebInvoke响应中是否有大小限制?

[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包含数千个报告实例。但是,数据存储超过10,000个报告,我在浏览器中获得以下内容:

错误324(net :: ERR_EMPTY_RESPONSE):未知错误。

我逐步完成了该服务的实施,我可以看到它没有任何例外情况。 JQGridDataStore对象完全创建并填充了我的10,000 + Report实例。但是,当我'F10'超过返回时,浏览器显示一个空的响应。这一切都发生在一秒钟之内,所以我不认为我会遇到任何超时。

基于此,我认为有一些类型的缓冲区大小限制我遇到。那里有什么样的限制,我将如何调整它们?

+0

我建议在svcconfigeditor中加载你的服务配置,然后查看并增加各种限制 – 2010-07-16 04:40:27

回答

6

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

这就是说,我建议你看看分页隐喻。没有人希望等待所有这些东西一举成名。 :)

+0

同意,一次性发送超过10,000份报告对我们的客户来说毫无用处,所以我也在进行分页。 – JadeMason 2010-07-16 05:59:40

2

在客户端的web.config,你可以设置你的服务可以通过设置maxReceivedMessageSize属性上收到的最大尺寸的结合:

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

我相信这默认为65536,所以如果你的反应是比那更大,那可能是你的麻烦。

希望这有助于!

+0

这是一个WCF客户端设置 - 他的客户端是浏览器。 – nitzmahone 2010-07-16 03:29:09

+0

你的答案解决了我的问题。 maxReceivedMessageSize是请求的限制,而不是响应。所以这可能无助于JadeMason。 – 2011-11-13 07:14:02

相关问题