Wcf 的serviceThrottling配置项,可起到对访问限流的作用,可避免并发访问量过大,服务占用的资源量超过上限造成机器崩溃。超过设置的阈值时,服务会让调用请求排队,如果排队超时,则会触发TimeoutException 的异常。如果配置文件中没有设置,则会取默认值,关于默认值,在网上看到了一些资料,发现和官方给定的文档都存在一些出入,它的默认值并非一个固定的值,而是和服务器的cpu核心数量有线性关系的,我认为还是应该以官方文档为最终的准则。
官方文档可访问serviceThrottling | Microsoft Docs ,截图如下。
翻译过来见下表。
属性 | 描述 |
maxConcurrentCalls | 一个正整数,它限制了当前服务主机上处理的消息的数量。超过限制的请求将排队等待。将此值设置为0相当于将其设置为Int32.Max值。默认为16*处理器的个数。 |
maxConcurrentInstances | 一个正整数,它限制在服务主机上一次执行的实例上下文对象的数量。超出限制数量的请求实例会排队等待。默认值是maxConcurrentCalls和maxConcurrentSessions的总和。 |
maxConcurrentSessions | 一个正整数,它限制服务主机可以接受的会话(session)的数量。超出设置数值的连接会被建立,但是并没有处于活动的状态(message没有被从channel中读取),可认为处于等待的状态。将此值设置为0相当于将其设置为It32.Max值。默认为100*处理器计数。 |
参考:WCF – ServiceThrottlingBehavior