2012-08-08 90 views
4

我有一個方法可以返回大量的對象。當我返回一些對象(10)時,一切都很好。問題是當我嘗試返回100個對象時。列表如此之大的原因是因爲列表中的對象有其他對象,所以我基本上返回一棵樹。在服務中返回大量數據

反正我使用命名管道,這裏是我使用的enpoint的配置:

<netNamedPipeBinding> 
     <binding name="NetNamedPipeBinding_ISymbolFileParser" 
         closeTimeout="00:10:00" 
         openTimeout="00:10:00" 
         receiveTimeout="00:10:00" 
         sendTimeout="00:10:00" 
         transactionFlow="false" 
         transferMode="Buffered" 
         transactionProtocol="OleTransactions" 
         hostNameComparisonMode="StrongWildcard" 
         maxBufferPoolSize="2147483647" 
         maxBufferSize="2147483647" 
         maxConnections="10" 
         maxReceivedMessageSize="2147483647" 
        > 
       <readerQuotas 
        maxDepth="32" 
        maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" 
        maxBytesPerRead="4096" 
        maxNameTableCharCount="2147483647" />      
     </binding> 
</netNamedPipeBinding> 

當我做限制的對象數量results.Take(10).ToArray();一切都很正常。當我返回100個對象,我得到異常:

enter image description here


我所做的事情來嘗試解決問題:

  1. 我增加配置文件中的號碼2147483647
  2. 而不是返回對象列表我序列化列表我自己的服務,然後創建一個測試方法,將返回byte []而不是列表。然後在客戶端上反序列化字節[]到列表中,並且工作正常!所以我現在有一個解決方案,最糟糕的情況是我必須序列化我的serlf對象並反序列化它。

我想借此機會詢問我是否應該使用不同的綁定。我聽說共享內存是fastes,但我不知道如何在wcf上使用它。因爲我在使用命名管道的同一臺機器之間進行通信。

+0

,如果你關注來自該名單正在成爲大型或另一個詞的記憶名單採取的是高,爲什麼不與其他數據結構的那 – 2012-08-08 20:28:46

回答

5

看起來像序列化問題,嘗試通過endpointBehaviors和serviceBehaviors中的行爲增加dataContractSerializer maxItemsInObjectGraph

同樣的問題here

+1

+1一個實驗的想法特別令人討厭的問題 - 確實非常原始,但需要幾個小時才能確定 – 2012-08-09 05:44:29