WCF-返回的数据变大时客户端中出现异常

WCF-返回的数据变大时客户端中出现异常,wcf,wcf-client,Wcf,Wcf Client,我有一个WCF服务器。客户端可以进行的调用之一生成一个数据数组作为其响应。每个数据项大约为6k,似乎当数组变得足够大(大约650个项目)时,WCF客户端会给出以下异常: 接收请求时出错 HTTP对的响应 . 这可能是由于服务 端点绑定不使用HTTP 协议这也可能是由于 正在中止HTTP请求上下文 由服务器执行(可能是由于 服务关闭)。请参阅服务器 日志以获取更多详细信息 服务器没有关闭,如果我更改函数调用以返回少量数据,服务器将使用有效数据进行响应。我不确定如何获取服务器日志,但这似乎是客户端

我有一个WCF服务器。客户端可以进行的调用之一生成一个数据数组作为其响应。每个数据项大约为6k,似乎当数组变得足够大(大约650个项目)时,WCF客户端会给出以下异常:

接收请求时出错 HTTP对的响应 . 这可能是由于服务 端点绑定不使用HTTP 协议这也可能是由于 正在中止HTTP请求上下文 由服务器执行(可能是由于 服务关闭)。请参阅服务器 日志以获取更多详细信息

服务器没有关闭,如果我更改函数调用以返回少量数据,服务器将使用有效数据进行响应。我不确定如何获取服务器日志,但这似乎是客户端的一个例外,所以我怀疑服务器日志是否会对我有所帮助

我在客户机上使用了MaxReceivedMessageSize,但没有任何帮助(目前为16MB)。有什么想法吗?TIA

我还要检查一下

<readerQuotas maxDepth="32" maxStringContentLength="65536" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />

节中的绑定。这些也会产生影响。

很可能是
maxArrayLength
,因为默认值是~16KB,您将获得大约3900KB的内存,每个内存为6KB,有650个项目。

我的包大小也有类似的问题,但在我的情况下,包的大小比您的大(错误消息为“对象图中可序列化或反序列化的最大项数为‘65536’”。我已解决了为我的服务配置绑定的问题。我将在整个绑定下面发布(请注意readerQuotas):


我希望它对你也有用

以下是我博客上的帖子:

谢谢,
Roberto

我没有使用配置文件,我是以编程方式设置这些内容的,我有binding.ReaderQuotas=System.Xml.xmldialdictionaryreaderquotas.Max;它将您建议的项目设置为非常高的值。您在服务器和客户端都设置了这些值吗?如果上述设置没有帮助,请尝试检查该值。默认值为4MB,而您正徘徊在该级别附近。请看是的,服务器和客户端都是。我将尝试maxRequestLength。谢谢。
<netTcpBinding>
        <binding name="NetTcpBinding_IServiceRequest" 
            closeTimeout="00:01:00"
            openTimeout="00:01:00" 
            receiveTimeout="00:10:00" 
            sendTimeout="00:01:00"
            transactionFlow="false" 
            transferMode="Buffered" 
            transactionProtocol="OleTransactions"
            hostNameComparisonMode="StrongWildcard" 
            listenBacklog="10"
            maxBufferPoolSize="524288" 
            maxBufferSize="2147483647" 
            maxConnections="10"
            maxReceivedMessageSize="2147483647">
            <readerQuotas 
                maxDepth="32" 
                maxStringContentLength="8192" 
                maxArrayLength="2147483647"
                maxBytesPerRead="4096" 
                maxNameTableCharCount="16384" />
            <reliableSession ordered="true" 
                inactivityTimeout="00:10:00"
                enabled="false" />
            <security mode="Transport">
                <transport 
                    clientCredentialType="Windows"
                    protectionLevel="EncryptAndSign" />
                <message clientCredentialType="Windows" />
            </security>
        </binding>
</netTcpBinding>