在WCF中maxConcurrentSessions默认为10,因此限制服务器与其有10个以上的开放TCP连接。
为什么会这样?
对于具有“少数”(或两个)客户端的服务器,将其设置为非常高的值是否安全,但是由于向客户端发送事件,需要为每个客户端保持netTcpBinding打开?
答案 0 :(得分:11)
我假设你的实例模式是Per Session。如果需要,可以将此值设置为Int32.Max。但是,详细了解WCF限制概念是很好的。
该值非常低以防止DOS攻击,因为WCF团队希望服务“默认安全”。
这是一个很好的阅读,请看this blog post here
请注意,这些值非常高 低......远低于许多人 希望他们成为。的思考 这里的WCF团队是他们想要的 WCF默认为“安全”和 减少DOS攻击的变化 针对您的服务启动。 这个想法可能听起来很棒,但在 实践它会导致重大问题。
在 事实上,你几乎肯定跑了 如果您使用的是这些问题 绑定像WsHttpBinding那样 支持会话。这是为什么?该 默认会话数为10,这个 最初出现意味着10个用户 可以同时访问您的服务 时间。但是,WCF会话不是 网络会议。与网络会话不同, 由服务器和。管理 通常使用http cookie跟踪, WCF会话由 客户端代理,直到他们结束 超时或客户发送 明确要求放弃 会话。这是事情,因为每个 代理实例启动它自己的 会话,一个用户,做了一些 立即请求可能是 一次使用多个会话。现在 你可能会认为你是安全的 你没有多线程代码 这样做的事情......但是 这不完全正确。因为 用户必须向其发出明确请求 服务器取消他的会话,是的 你可能会离开会议 意外开放。曾经的人 经常使用ASMX服务 没有意识到他们需要关闭 他们的代理对象,以及少数几个 确实意识到物体需要 关闭经常犯错误 像一次性物品一样对待它们 这会导致会话被遗忘 打开。记住默认 会话限制为10,这意味着 如果您拨打十个电话到服务 在相对中使用WsHttpBinding 很短的时间,你可以结束 将服务锁定到 会话到期。
决定了 在这里制作的WCF团队可能令人困惑。 试图限制的能力 攻击者发动DOS攻击 对你的服务,他们做到了 更容易执行DOS攻击 反对你的服务。你不再是 需要资源来充斥服务器 请求,以便它不能再 回应,你只需要做一个 一些没有明确的电话 请求连接关闭和 最大化会话数。除非设定 这个值非常高,你跑了 服务器拒绝的风险 接受任何传入的连接, 尽管它令人不寒而栗 没有CPU使用率。
答案 1 :(得分:1)
只要您的服务器具有处理请求的资源,您就可以将其设置得更高。默认为10,因为这可以轻松抵御对您的服务的任何拒绝服务攻击。如果您拥有专用于此单一服务的强大服务器,则可以根据需要将其设置为10,000。没有一个神奇的数字可以用于此 - 您需要平衡一方的需求和另一方的服务器资源,这个最大并发会话数有助于防止崩溃!