2009-11-24 97 views

回答

11

我假设你的实例模式是每个会话。如果需要,您可以将此值设置为Int32.Max。如何过,这是好事,详细了解了WCF节流概念..

值是非常低,以防止DOS攻击,WCF团队希望服务是“默认安全”。

这里是一个很好读,看看this blog post here

请注意,这些值都非常低 ...比许多人要低得多 想的那样。的 的WCF队这边的想法是,他们希望 WCF是“默认安全”和 降低DOS攻击是 从对你的服务推出了变化。 这个想法听起来不错,但在 实践中它会导致重大问题。

在 事实上,你几乎可以肯定,如果你使用的是 像WsHttpBinding的是 支持会话绑定跑 到这些问题。这是为什么?在10届的 默认数量,这 首次出现时意味着10个用户 可以在同一时间 访问服务。但是,WCF会话不是 Web会话。与网络会议,0​​这是由服务器管理和 一般采用HTTP Cookie进行追踪, WCF会话由 客户端代理发起并没有结束,直到他们 超时或客户端发送一个 明确要求放弃 会议。这里的东西,因为每个 代理实例启动它自己的 会议,这使得在一次几个 请求可以使用多个会话一次 可能是用户。现在 你可能会想你是安全的,如果你 不具备多线程代码 ,做这种事情......但 这是不完全正确。因为 用户必须做出明确要求 服务器取消他的会议,这是 可能你会离开会议 开放意外。谁一直 与ASMX服务工作的人,往往 没有意识到,他们需要关闭 他们的代理对象,以及少数 一定要明白,对象必须是 关闭经常做的 错误对待他们像一次性物品, ,导致会话保持打开状态 。记住,默认 会话限制为10一致,这意味着 如果你打造十个电话中的时间相对 短期内大量使用的WSHttpBinding服务 ,你可以最终 服务锁定直到 会话过期。

WCF团队 在此做出的决定可能令人困惑。 为了限制攻击者针对您的服务发起DOS攻击 的能力,他们让 更容易对您的服务执行DOS攻击 。你不再 需要的资源涌入服务器 与要求,以便它可以不再 回应,你只需要做出 少数通话过程中不会明确 请求关闭连接并 最大程度的发挥会话计数。除非将此值设置为 这个值非常高,否则运行 服务器拒绝 接受任何传入连接的风险为 ,尽管事实上它使CPU的使用率为零,从而冷却了 。

1

只要您的服务器具有处理请求的资源,您可以将其设置得更高。它默认为10,因为这很容易击败对您的服务的任何拒绝服务攻击。如果您拥有专用于此单一服务的强大服务器,则可以将其设置为10,000。没有一个幻数可以用于此 - 您需要平衡一方的需求和另一方的服务器资源,并发会话的最大数量有助于防止融化!

+0

10个连接建立后拒绝使用您的服务是一种有效的方法来抵御拒绝服务攻击...... Otoh对环境有利,因为服务器CPU将保持相当平静。 – 2014-11-09 23:25:12