WCF readerQuotas 设置 - 缺点?

标签 wcf performance

如果 WCF 服务在其响应消息中返回一个字节数组,则数据有可能超过 16384 字节的默认长度。发生这种情况时,异常将类似于

The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader.



我在网上看到的所有建议都只是增加 <readerQuotas> 中的设置。元素到最大,所以像
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
              maxArrayLength="2147483647" maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />

在服务器上,在客户端上类似。

我想知道这种方法的任何缺点,特别是如果字节数组的大小偶尔会变得非常大。上面的设置是否只是让 WCF 为每个请求声明一个巨大的数组?您是否必须限制返回的数据的最大大小,或者您可以指定一个合理大小的缓冲区并让 WCF 继续运行,直到读取所有数据?

谢谢!

最佳答案

主要缺点是潜在的攻击漏洞 - 例如恶意来源现在可以用最大 2 GB 的消息淹没您的网络服务器,并可能将其关闭。

当然,允许 2 GB 消息也会在内存消耗方面给服务器带来一些压力,因为这些消息需要在内存中完整组装(除非您在 WCF 中使用流协议(protocol))。如果您有 10 个客户端向您发送 2 GB 的消息,那么您的服务器上将需要大量 RAM! :-)

除此之外,我没有看到任何真正的问题。

马克

关于WCF readerQuotas 设置 - 缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835114/

相关文章:

java - 数组/vector 作为方法参数

c# - WCF CustomToken 错误 "security token with the ' Basic 的附件模式必须签名。”

c# - WCF 4.0 - 从 URL 或 POST 主体获取参数

需要将消息推送到客户端的 WCF 服务

python - CPU 和 GPU 生成的结果不匹配

performance - Postgres 8.3 中的位图扫描比索引扫描 Postgres 9.4 快 2 倍?

asp.net - 在一个网站上运行多个 Web 服务

c# - 重命名 WCF 服务时的问题

C++:结构的构造函数?

mysql - 了解MySQL读取数据的状态统计