为什么maxConcurrentSessions默认为这么低的值?什么是安全价值?

Ian*_*ose 4 .net wcf nettcpbinding

在WCF中,maxConcurrentSessions默认为10,因此限制服务器与其有10个以上的打开TCP连接.

为什么会这样?

对于拥有"少数"(或两个)客户端的服务器来说,将它设置为非常高的值是否安全?但是由于向客户端发送事件,需要为每个客户端保持netTcpBinding打开?

ama*_*int 11

我假设你的实例模式是Per Session.如果需要,可以将此值设置为Int32.Max.但是,详细了解WCF节流概念是很好的..

由于WCF团队希望服务"默认安全",因此该值非常低以防止DOS攻击.

这是一个很好的阅读,请看这里的博客文章

请注意,这些值非常低......比许多人希望的要低得多.这里WCF团队的想法是他们希望WCF"默认安全"并减少针对您的服务启动的DOS攻击的变化.这个想法可能听起来很棒,但在实践中它会引起重大问题.

实际上,如果使用支持会话的WsHttpBinding这样的绑定,几乎肯定会遇到这些问题.这是为什么?默认的会话数为10,这首先表示10个用户可以同时访问您的服务.但是,WCF会话不是Web会话.与由服务器管理并通常使用http cookie跟踪的Web会话不同,WCF会话由客户端代理启动,并且在超时或客户端发送显式请求以放弃会话之前不会结束.这就是事情,因为每个代理实例都会启动它自己的会话,一次发出一些请求的用户可能会同时使用多个会话.现在你可能会认为如果没有多线程代码来做这种事情你是安全的......但这并不完全正确.由于用户必须向服务器发出明确请求以取消其会话,因此您可能会意外地打开会话.一直在使用ASMX服务的人通常没有意识到他们需要关闭他们的代理对象,并且少数意识到需要关闭对象的人经常犯下将它们视为一次性对象的错误,这导致会议开放.请记住,默认会话限制为10,这意味着如果您在相对较短的时间内使用WsHttpBinding对服务进行十次调用,则最终可能会锁定您的服务,直到会话过期.

WCF团队在这里做出的决定令人困惑.为了限制攻击者对您的服务发起DOS攻击的能力,他们使得对您的服务执行DOS攻击变得更加容易.您不再需要资源来使服务器充满请求,以便它不再响应,您只需要进行一些调用而无需显式请求连接关闭并最大化会话计数.除非将此值设置得非常高,否则您将面临让服务器拒绝接受任何传入连接的风险,尽管事实上它的CPU使用率为零.