What is the default instance context mode?

The simple answer is that the default Instancing mode is PerSession

Provided:

  • The Session Type you are using supports sessions
  • See [Binding type session support] (https://docs.microsoft.com/en-us/dotnet/framework/wcf/system-provided-bindings).
  • If the channel does not create a session the behavior is as if it were PerCall.
  • The Service contract allows sessions - default is "Allowed"

Here is a Microsoft provided sample with the default imperatively configured in the code. Default behavior sample

[ServiceBehavior(  
AutomaticSessionShutdown=true,  
ConcurrencyMode=ConcurrencyMode.Single,  
InstanceContextMode=InstanceContextMode.PerSession,  
IncludeExceptionDetailInFaults=false,  
UseSynchronizationContext=true,  
ValidateMustUnderstand=true)]
public class CalculatorService : ICalculator { ... }

I found reading about session in this Microsoft article ( Using Sessions ) particularly enlightening in understanding how Sessions is opened and closed and how this relates to Instancing and Concurrency.

By default the WCF client will create a new session, which will create a server instance, all calls for the duration of the session is called a conversation and is served by a single instance (Instancing) of the server with a single thread (Concurrency) dedicated to that session/client/conversation.

If you use the default instancing behavior in WCF, all calls between a WCF client object are handled by the same service instance. Therefore, at the application level, you can think of a session as enabling application behavior similar to local call behavior. For example, when you create a local object:

A constructor is called.

All subsequent calls made to the WCF client object reference are processed by the same object instance.

A destructor is called when the object reference is destroyed.

Sessions enable a similar behavior between clients and services as long as the default service instance behavior is used.

Hope this helps someone as it took me a while to find the answer.


It's PerSession

Link to MSDN doc

Tags:

Wcf