代码之家  ›  专栏  ›  技术社区  ›  Payton Byrd

10922.NET 3.5中WCF的记录限制

wcf
  •  3
  • Payton Byrd  · 技术社区  · 16 年前

    我的处境很奇怪。我有一大组记录要作为列表从WCF服务返回。如果我将集合作为数据表返回,一切都会正常工作。这套唱片大约有19000张。如果我将集合作为列表返回(其中t是一个数据合同),它将出错并在返回任何超过10922条记录的集合时关闭连接。我会认为这是我的数据的问题,除了另一个人报告了完全相同的问题,限制为10922条记录。有没有其他人遇到过这个问题,如果有,你是怎么解决的?

    3 回复  |  直到 16 年前
        1
  •  4
  •   Markus Rohlof    16 年前

    我们遇到了同样的问题。

    从服务跟踪日志中,我们可以检索以下异常:

    尝试序列化参数[]时出错。尝试序列化参数[]时出现最大数字错误。对象图中可以序列化或反序列化的最大项数为“65536”。更改对象图形或增加最大项目对象图形配额。

    在使用参数maxitemsinobjectgraph更改了DataContractSerializer键之后,即使有数百万条记录,一切都运行得很顺利(前提是您相应地更改了maxReceivedMessageSize)。

    这些更改必须在web.config和app.config中按以下方式进行:

    Web.CONFIG:

    <behaviors>
        <serviceBehaviors>
            <behavior name="WasteWatcher.TestService.ServiceImplementation.TestService_Behavior">
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceMetadata httpGetEnabled="true" />
              <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    

    App.CONFIG:

    <behaviors>
        <endpointBehaviors>
            <behavior name="SerializerBehavior">
                <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
        </endpointBehaviors>
    </behaviors>
    

    不要忘记将参数behaviorConfiguration=“serializerBehavior”添加到端点键:

    <endpoint address="http://localhost:9542/TestService.Host/TestService.svc"
        binding="customBinding" bindingConfiguration="DefaultEndpoint"
        contract="WasteWatcher.TestService.Test.Client.TestServiceProxy.TestServiceContract"
        name="DefaultEndpoint" behaviorConfiguration="SerializerBehavior">
        <identity>
            <dns value="localhost" />
        </identity>
    </endpoint>
    

    最好的问候

    马库斯·罗洛夫

        2
  •  1
  •   Meidan Alon    16 年前

    在客户端和服务器上检查端点的maxReceivedMessageSize。

        3
  •  0
  •   Wix    16 年前

    我们实际上在工作中遇到了这个问题。我们试图通过WCF Web服务发送大量数据。我们得到了大约20000条记录的剪切,所以我们最终打破了数据并进行了一些Web服务调用。你能做类似的事吗?把记录分成小块,然后在另一端合并?

    推荐文章