有没有办法查看是否已达到WCF MaxConcurrentSessions或MaxConcurrentCalls?
我们有一个包含许多操作的WCF服务。大多数是请求/响应,但一个是长轮询方法,它会在很长一段时间后返回,除非服务器端发生某些事情。
它用于近乎实时地从WCF服务向客户端发送通知。如果没有任何反应,该方法会在一段时间后返回超时消息,客户端将再次调用它以轮询新的通知。
该服务正在运行InstanceContextMode = InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.Multiple。
单实例是由于实时通知 - 它们是通过UDP从另一个系统接收的,WCF服务绑定到本地UDP端口,因此它可以侦听通知,并将它们传递给等待的客户端。
我们检测到MaxConcurrentSessions和MaxConcurrentCalls的默认设置对于使用该服务的活动客户端数量而言太低。它们似乎阻止会话或调用每个长轮询请求,这意味着请求/响应请求被阻止直到轮到它们。
我们希望继续使用长轮询模式 - 由于防火墙遍历问题,双向绑定或直接TCP是不可能的。我们当然可以将MaxConcurrentSessions和MaxConcurrentCalls值增加到MAXINT或类似值,但我不是这种方法的粉丝。 相反,我想将值增加到理智,并能够检测是否已达到上限。