2012-08-08 50 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