2

旁注:即使问题是几个月前发布的,我仍在寻找一个好的答案,因此欢迎任何反馈。

在开发 WCF Web 服务时,我遇到了错误:

The maximum array length quota (16384) has been exceeded while reading XML data.

像许多其他人一样,并通过修改绑定配置解决了这个问题。

在互联网上寻找答案时,解决方案几乎总是更改绑定配置,将设置设置maxArrayLength为最大值,然后进行Streamed传输。在某些情况下,例如在WCF 发送大数据这个问题中,人们建议修改绑定配置,而不是以较小的块传输数据。

但是最大值和流传输将始终有效吗?即使在您可能永远不知道数据的最大大小是多少的系统中?

如何在这两个选项之间进行选择?

这取决于你转移什么?下载媒体与返回大型日志信息?

到目前为止,给我的答案围绕着流媒体的技术方面,但我正在寻找的答案应该更多地关注所暴露情况下的指导方针,关于在两个选项之间进行选择

4

1 回答 1

1

并非所有绑定都支持流式传输。只有 basicHttpBinding、NetTcpBinding、NetNamedPipeBinding 和 WebHttpBinding。如果使用流媒体,您也无法进行可靠的会话。

那么,为什么要对大消息进行流式处理呢?好吧,如果您不使用流式传输,它将把整个消息加载到内存缓冲区中,这可能会杀死可用资源。

有关详细信息,请参阅 MSDN:MSDN 大型消息传输

于 2012-08-31T02:22:49.487 回答