代码之家  ›  专栏  ›  技术社区  ›  Graham Clark

wcf readerquotas设置-缺点?

  •  27
  • Graham Clark  · 技术社区  · 15 年前

    如果一个WCF服务在其响应消息中返回一个字节数组,那么数据有可能超过默认长度16384字节。当这种情况发生时,例外情况将是

    最大数组长度配额(16384) 在读取XML时已超过 数据。此配额可能会增加 更改MaxArrayLength属性 在xmlDictionaryReaderQuotas上 创建XML时使用的对象 读者。

    我在网上看到的所有建议只是增加 <readerQuotas> 元素的最大值,所以

    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                  maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                  maxNameTableCharCount="2147483647" />
    

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

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

    谢谢!

    2 回复  |  直到 13 年前
        1
  •  33
  •   marc_s Anurag    15 年前

    主要缺点是潜在的攻击漏洞-例如,恶意源现在可以向您的Web服务器发送高达2 GB的消息,并可能使其降低。

    当然,允许2GB消息也会对服务器的内存消耗造成一定的压力,因为这些消息需要在内存中完全组装(除非在WCF中使用流协议)。如果您有10个客户机向您发送2 GB的消息,那么您的服务器将需要大量的RAM!-)

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

    马克

        2
  •  8
  •   Chris Gillum    13 年前

    有一篇关于msdn的文章解释了在设置这些值时需要考虑的各种安全因素。一些拒绝服务攻击会占用您的内存,其中一些攻击(如MaxDepth设置不正确)可能会导致致命的StackOverflowExceptions,从而在单个请求中导致服务器停机。

    http://msdn.microsoft.com/en-us/library/ms733135.aspx