0

I have a WCF service running InstanceContextMode = PerCall, ConcurrencyMode = Multiple, TCP and is hosted in Selfhost(Windows Service) and IIS7/IIS8.

The throttling is set to this :

<serviceThrottling maxConcurrentCalls="2000" maxConcurrentSessions="2147483647" maxConcurrentInstances="2000"/>

And the binding looks like this :

<binding name="netTcpRegular" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="infinite" sendTimeout="01:00:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="1000" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="200" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          <reliableSession ordered="true" inactivityTimeout="infinite" enabled="false"/>
          <security mode="None">
            <transport clientCredentialType="None"/>
          </security>
        </binding>

We are keeping state at the serivce so every user will have there own objects that is fetched on every call.

The question is how many concurrent users (sessions) can we have with these settings and what settings is affecting this?

Banshee
  • 15,376
  • 38
  • 128
  • 219

1 Answers1

0

It depends how many concurrent calls a single client makes at any one time - ie if it makes 5 calls on 5 different threads then your maxconcurrentusers value will be 5 times larger than the number of sessions it can handle. As you're using InstanceContextMode = PerCall then you'll find that WCF will take the lower of maxConcurrentCalls and maxConcurrentInstances for the number of instances it creates anyway.

So if you have just one call per client being made at any one time, number of sessions you have from the values you've given is 2000.

If you make 5 concurrent calls per client then you should set it to 400.

Quite often trial & error in a load test is the best way forward here.

A good example here -- http://blogs.msdn.com/b/rickrain/archive/2009/06/26/wcf-instancing-concurrency-and-throttling-part-3.aspx

Chris
  • 2,471
  • 25
  • 36
  • Thanks! We are usually not using multithreading for the calls, so there will most of the time only be one call at a time for the client. It does however have a callback contract with the service if that makes any breaking changes? So what you say is that we got 2000 concurrent sessions (2000 loged in users concurrent) and if more users try to logon thay will be set in queue or rejected? – Banshee Nov 07 '12 at 08:53
  • I *believe* their session will just time out and die off. Set it to 1 and see! Each service is different and acts differently - load testing it will definitely help you fine tune the service throttling levels. – Chris Nov 07 '12 at 08:57
  • Okay, I will try a load test but do not have the time just now, so can I say that my system suports 2000 sessions at one time? And this is based on the maxConcurrentInstances? – Banshee Nov 07 '12 at 09:09
  • Thanks. If I have 5 concurrent calls per client with the stated settings, how many users will it then be? And what setting is responsible for this? You say "you should set it to 400", what setting is you referring to? – Banshee Nov 07 '12 at 09:31
  • I was referring to maxsessions to be 400 - but this was on the assumption that you were using multithreading... and on an assumption of 5 threads per client being used - as 2000 maxconcurrentcalls - and 2000/5 gives the 400. – Chris Nov 07 '12 at 10:26