我注意到,当我在wcf服务端点中设置<serviceThrottling maxConcurrentCalls="2"
[仅用于测试],并激活两个保持活动的调用和第三个调用时,客户端上的通道被创建并打开,没有任何问题。
我本以为打开会由于maxConcurrentCall而失败,但事实并非如此。只有在达到sendtimeout之后,通信才会出现异常。
我更希望在达到maxConcurrentCall时打开通道会失败。有可能配置这样的行为吗?
Gerard。。。主机和客户端之间的开放连接与并发调用不同。在这种情况下,并发意味着主机上的调用正在进行中(主机接收到请求并发送响应后的那一刻)。maxConcurrentCalls处理并发处理的调用数量,但超过这个限制只会将剩余的请求排队,直到其他调用之一完成并准备好一个新的插槽——不会发送错误。我不相信你能让它在达到极限时失误。
此外,除非你用呼叫轰炸主机,否则实际上要达到三个并发呼叫并不容易,因为呼叫处理得太快了。
有趣的是,我不得不在工业规模的WCF站点(basichhttpbinding)上进行一系列性能/负载测试,将maxconcurrentCalls(和其他限制设置)设置为1或1000不会对处理请求的速度产生巨大影响。事实上,我能让我们的服务器运行得最快(每秒180次调用,每次上传一个文件)就是关闭节流,让WCF自己管理。