We are developing huge enterprise application using WCF . As part of performance testing for the SOA developed using WCF ,we came across to the following issue.
Test Lab Environment is Windows Server 2008(8 Proc)
Binding used NetTcpBinding
Loading testing conducted using Visual Studio Team Test Edition
· As the user load increases , it seems throughput started saturating after some time
· Added WCF Performance counters ,the following are observed
a. Throughput saturation occurs at 30 users
b. Calls Outstanding shows an increasing trend (Post 30 users the rate at which the 'Calls Outstanding' value increases is quite high)
c. The Calls/Second increases till the user load of 30 users. Beyond this user load the Calls/Second value is steady and saturates.
d. Calls Outstanding reduces and falls to zero immediately after the stop of the test (highlighted black line in the snapshot attached)
· We have add the throttling behavior to the host as follows
System.ServiceModel.Description.ServiceThrottlingBehavior throttlingBehavior = new System.ServiceModel.Description.ServiceThrottlingBehavior();
throttlingBehavior.MaxConcurrentCalls = 64;
throttlingBehavior.MaxConcurrentInstances = 464;
throttlingBehavior.MaxConcurrentSessions = 400;
ServiceHost host = new ServiceHost(typeof(T));
ServiceBehaviorAttribute attribute = (ServiceBehaviorAttribute)host.Description.Behaviors[typeof(ServiceBehaviorAttribute)];
attribute.ConcurrencyMode = ConcurrencyMode.Multiple;
attribute.InstanceContextMode = InstanceContextMode.PerCall;
host.Description.Behaviors.Add(throttlingBehavior);
host.Open();
It seems that ,number of calls on queue (waiting to be processed ) even though concurrency mode is set to multiple.
Any thoughts will be helpful why throughput saturation is happening even though the throttling behavior is set correctly.