Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在服务中返回大数据_C#_Wcf_Named Pipes_Large Data - Fatal编程技术网

C# 在服务中返回大数据

C# 在服务中返回大数据,c#,wcf,named-pipes,large-data,C#,Wcf,Named Pipes,Large Data,我有一个返回大量对象的方法。当我返回一些对象(10)时,一切都很好。问题是当我尝试返回100个对象时。列表之所以如此之大,是因为列表中的对象包含其他对象,所以我基本上返回一棵树 无论如何,我使用的是命名管道,下面是我使用的enpoint的配置: <netNamedPipeBinding> <binding name="NetNamedPipeBinding_ISymbolFileParser" closeTimeout=

我有一个返回大量对象的方法。当我返回一些对象(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个对象时,我得到一个异常:


我为解决问题所做的事情:

  • 我将配置文件中的数字增加到2147483647
  • 我没有返回对象列表,而是序列化了服务上的列表,然后创建了一个测试方法,该方法将返回byte[]而不是列表。然后在客户机上,我将字节[]反序列化为一个列表,这样就行了!所以我有一个解决方案,到目前为止,最糟糕的情况是我必须序列化我的serlf对象并反序列化它

  • 我还想借此机会问一下,我是否应该使用不同的绑定。我听说共享内存是最快的,但我不知道如何在wcf上使用它。因为我在使用命名管道的同一台机器之间进行通信

    看起来像是序列化问题,请尝试通过endpointBehaviors和serviceBehaviors中的行为增加
    dataContractSerializer maxItemsInObjectGraph


    同样的问题

    如果您担心列表变得越来越大,或者换句话说,列表占用的内存太大,那么为什么不尝试其他数据结构+1一个特别棘手的问题呢?确实非常原始,但需要几个小时才能解决