WCF限流詳細(xì)配置介紹
WCF框架熟練應(yīng)用需要我們?cè)趯?shí)踐中去不斷的鞏固,才能真正掌握這一框架的應(yīng)用技巧。WCF限流不是直接的實(shí)例管理技術(shù),他允許開發(fā)者限制客戶端的連接數(shù)已經(jīng)服務(wù)器負(fù)荷。#t#
使用限流技術(shù)以后,一旦超出配置的設(shè)置值,WCF就會(huì)自動(dòng)的將等待處理的調(diào)用放入隊(duì)列中,然后再依次從隊(duì)列中取出,如果客戶端等待超時(shí),那么客戶端會(huì)獲得一個(gè)TimeoutException異常。每個(gè)服務(wù)類型都可以使用WCf限流技術(shù)。
WCF限流配置參數(shù)
并發(fā)會(huì)話最大數(shù):針對(duì)TCP,IPC等能保持傳輸層連接的會(huì)話的服務(wù)綁定的獨(dú)立客戶端最大數(shù),也就是能保持會(huì)話的客戶端的最大連接數(shù)。對(duì)于Http等無連接的服務(wù)是無效的,默認(rèn)為10
并發(fā)調(diào)用最大數(shù):指所有服務(wù)實(shí)例中讀取正在執(zhí)行的調(diào)用總數(shù)
并發(fā)實(shí)例最大數(shù):表示存活的并發(fā)上下文總數(shù)。默認(rèn)是無限的。
配置WCF限流
- < behaviors>
- < serviceBehaviors>
- < behavior name =
"ThrottledBehavior">- < serviceThrottling
- maxConcurrentCalls ="12"
- maxConcurrentSessions ="34"
- maxConcurrentInstances ="2"
- />
- < /behavior>
- < /serviceBehaviors>
- < /behaviors>
在服務(wù)端讀取WCF限流參數(shù)
ChannelDispatcher dispatcher = OperationContext.Current.Host.ChannelDispatchers[0] as ChannelDispatcher;
ServiceThrottle serviceThrottle = dispatcher.ServiceThrottle;
Trace.WriteLine("MaxConcurrentCalls = "+ serviceThrottle.MaxConcurrentCalls);
Trace.WriteLine("MaxSessions = " + serviceThrottle.MaxConcurrentSessions);
Trace.WriteLine("MaxInstances = " + serviceThrottle.MaxConcurrentInstances);
編程配置WCF限流
宿主進(jìn)程可以以編程方式配置限流,但是要在打開宿主之前執(zhí)行
- ServiceHost host =
new ServiceHost(typeof(MyService));- //Make sure there is no
throttle in the config file- ServiceThrottlingBehavior
throttle = host.Description.
Behaviors.Find< Service
ThrottlingBehavior>();- if(throttle == null)
- {
- throttle = new Service
ThrottlingBehavior();- throttle.MaxConcurrentCalls = 12;
- throttle.MaxConcurrentSessions = 34;
- throttle.MaxConcurrentInstances = 2;
- host.Description.
Behaviors.Add(throttle);- }
- host.Open();
綁定中的WCF限流連接
在使用TCP和IPC綁定的時(shí)候我們也可以在綁定中為一個(gè)特定的終結(jié)點(diǎn)配置最大連接數(shù)。
- < netTcpBinding>
- < binding name="TCPThrottle"
maxConnections="25">- < /binding>
- < /netTcpBinding>
maxConnections的默認(rèn)值為10,如果綁定限流與服務(wù)行為的WCF限流都設(shè)置了最大連接值,WCF選擇其中較小的一個(gè)