WCF - 返回数据时客户端异常

时间:2011-01-17 17:05:49

标签: wcf wcf-client

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

  

接收时发生错误   HTTP响应   http://localhost:8080/TCA/TCAService。   这可能是由于服务   端点绑定不使用HTTP   协议。这也可能是由于   中止HTTP请求上下文   由服务器(可能由于   服务关闭)。见服务器   记录更多详细信息。

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

我在客户端上玩过MaxReceivedMessageSize,但它没有帮助(它目前为16MB)。有任何想法吗? TIA

2 个答案:

答案 0 :(得分:1)

我也会查看

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

绑定部分。那些也可以有所作为 它最有可能是maxArrayLength,因为默认值是大约16KB,你得到的大约3900KB,650个项目,每个6KB。

答案 1 :(得分:0)

我的包大小有类似的问题,但在我的情况下,包大小比你的大(并且错误消息是“对象图中可以序列化或反序列化的最大项目数是' 65536'“)。我解决了为我的服务配置绑定的问题。我发布在整个绑定之下(注意readerQuotas):

<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>

我希望它也适合你。

以下是我博客的帖子:Maximum number of items that can be serialized or deserialized in an object graph is ’65536′

谢谢, 罗伯特