【问题标题】:MaxBufferSize property?MaxBufferSize 属性?
【发布时间】:2016-03-07 12:44:47
【问题描述】:

我一直认为,WCF BasicHttpBinding 选项 MaxBufferSize 旨在保护我免受 DoS 攻击,但是,documentation 中的以下注释很奇怪:

如果消息超过为缓冲区设置的最大值,则不会丢弃该消息。相反,从 CLR 堆请求更多内存,这会导致比使用缓冲区更多的垃圾回收开销。

所以看起来MaxBufferSize 属性更像是一个默认值,而不是一个MaxBufferSize。我错过了什么吗?

【问题讨论】:

  • 嗯,它确实做到了它所暗示的那样。这是您的应用程序将接受的最大块,数据包可以更小,任何更大的都将进入
  • 究竟什么是“包”?最后,在我的服务中调用了一个方法,它一次接收所有参数。不再有“包”的概念......所以必须同时分配所有内存。还是 MaxBufferSize 仅与流式合同相关?
  • 将其视为调整应用程序的一种方式。正如它所说,超过 maxbuffer 大小的请求不会被丢弃,例如,如果您将其设置为 5k,并且有人向您发送 1gb,您将获得 200(ish)块,这比您将最大缓冲区设置为1gb(好吧,有些夸张了)一个“包裹”肯定是一个请求?

标签: c# wcf


【解决方案1】:

找到了答案,感谢 BugFinder 提供正确方向的提示。

MaxBufferSize 确实只在流媒体 场景中很重要。在缓冲 WCF 场景中,它必须设置为与MaxReceivedMessageSize 相同的值(否则会引发配置异常)。 MaxReceivedMessageSize 是让我们免于 DoS 攻击(硬限制)的方法。

【讨论】:

  • 我在我的 java 应用程序中使用 c# wcf 服务,在那里我配置了这个 MaxBufferSize
猜你喜欢
  • 2015-01-11
  • 2013-02-06
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2023-03-29
  • 2012-07-19
相关资源
最近更新 更多