旁注:即使问题是几个月前发布的,我仍然在寻找一个好的答案,所以欢迎任何反馈。
在开发WCF Web服务时,我遇到了错误:
The maximum array length quota (16384) has been exceeded while reading XML data.
与许多其他人一样,并通过修改绑定配置解决了这个问题。
在互联网上寻找答案时,解决方案几乎总是更改绑定配置,将maxArrayLength
设置为最大值,转到Streamed
转移。
在某些情况下,例如在这个问题WCF sending huge data中,人们建议修改绑定配置而不是以较小的块传输数据。
但最大值和流式传输总是有效吗?即使在你可能永远不知道最大尺寸会有数据的系统中呢?
如何在两个选项之间进行选择?
这取决于你转移的内容?下载媒体与返回大型日志信息?
直到现在我给出的答案都围绕着流媒体的技术方面,但我正在寻找的答案应该更多地关注暴露的情况下的指导方针,关于在两个选项之间进行选择。 / p>
答案 0 :(得分:1)
并非所有绑定都支持流式传输。唯一能做的就是basicHttpBinding,NetTcpBinding,NetNamedPipeBinding和WebHttpBinding。如果使用流式传输,您也无法进行可靠的会话。
那么为什么关于大型消息流式传输的重要性呢?好吧,如果你不使用流媒体,它将把整个消息加载到内存缓冲区中,这可能会杀死可用的资源。
有关详细信息,请参阅MSDN:MSDN Large Message Transfers