wcf中配置属性MaxReceivedMessageSize的最大限制是否会影响服务性能?

san*_*ula 6 wcf

我为我的wcf服务获取以下通信异常,使得cal转换为另一个wcf服务:"已超出传入消息的最大邮件大小配额(65536).要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性. "

我通过增加如下大小来解决这个问题:maxReceivedMessageSize ="50000000"

但是,在这里我想知道是否有任何增加消息大小的副作用到如此大的水平.

mar*_*c_s 5

是的 - 可能.WCF默认将此限制设置为低(64K)的原因是:假设您的服务器忙于响应请求,比如数十或数百,并且它们都需要最大的消息大小.

潜在地,您的服务器可能必须同时分配数十个或数百个消息缓冲区 - 如果您有100个用户并且每个请求64K,那是6.4 MByte - 但如果您有200个用户并且每个请求5 MB - 这是一个GB的RAM在服务器中 - 仅用于消息缓冲区,用于一个服务.

所以是的 - 限制最大消息大小确实有意义,它有助于管理服务器的内存消耗(从而有助于管理性能).如果你打开它太宽,攻击者可能只会做这样的攻击 - 用虚假的请求充斥你的服务器,每个都分配尽可能多的内存,最终使你的服务器失效(这样的拒绝服务攻击很常见) .