2010-07-15 100 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