我有一个WCF服务器。客户端可以进行的一个调用生成一个数据数组作为其响应。每个数据项大约为6k,似乎当数组足够大时(约650项左右),WCF客户端会出现以下异常:
接收时发生错误 HTTP响应 http://localhost:8080/TCA/TCAService。 这可能是由于服务 端点绑定不使用HTTP 协议。这也可能是由于 中止HTTP请求上下文 由服务器(可能由于 服务关闭)。见服务器 记录更多详细信息。
如果我更改函数调用以返回少量数据,则服务器不会关闭,并使用有效数据进行响应。我不确定如何获取服务器日志,但这似乎是一个客户端异常,所以我怀疑服务器日志会对我有所帮助。
我在客户端上玩过MaxReceivedMessageSize,但它没有帮助(它目前为16MB)。有任何想法吗? TIA
答案 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′
谢谢, 罗伯特