【发布时间】:2016-03-07 12:44:47
【问题描述】:
我一直认为,WCF BasicHttpBinding 选项 MaxBufferSize 旨在保护我免受 DoS 攻击,但是,documentation 中的以下注释很奇怪:
如果消息超过为缓冲区设置的最大值,则不会丢弃该消息。相反,从 CLR 堆请求更多内存,这会导致比使用缓冲区更多的垃圾回收开销。
所以看起来MaxBufferSize 属性更像是一个默认值,而不是一个MaxBufferSize。我错过了什么吗?
【问题讨论】:
-
嗯,它确实做到了它所暗示的那样。这是您的应用程序将接受的最大块,数据包可以更小,任何更大的都将进入
块 -
究竟什么是“包”?最后,在我的服务中调用了一个方法,它一次接收所有参数。不再有“包”的概念......所以必须同时分配所有内存。还是 MaxBufferSize 仅与流式合同相关?
-
将其视为调整应用程序的一种方式。正如它所说,超过 maxbuffer 大小的请求不会被丢弃,例如,如果您将其设置为 5k,并且有人向您发送 1gb,您将获得 200(ish)块,这比您将最大缓冲区设置为1gb(好吧,有些夸张了)一个“包裹”肯定是一个请求?