返回服务上的大数据

时间:2012-08-08 20:21:34

标签: c# wcf named-pipes large-data

我有一个返回大量对象的方法。当我返回一些物体(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 []而不是列表的Test方法。然后在客户端我将byte []反序列化为一个列表,这是有效的!所以我有一个解决方案到目前为止最糟糕的情况是我必须序列化我的serlf对象并反序列化它。
  3. 我想借此机会询问我是否应该使用不同的绑定。我听说共享内存是紧张的,但我不知道如何在wcf上使用它。因为我在同一台机器之间进行通信,所以我正在使用命名管道。

1 个答案:

答案 0 :(得分:4)

看起来像序列化问题,尝试在endpointBehaviors和serviceBehaviors中增加dataContractSerializer maxItemsInObjectGraph行为。

同样的问题here

相关问题