What is the default instance context mode?
When I do not specify InstanceContextMode
in the service, what's the开发者_StackOverflow default instance mode?
It's PerSession
Link to MSDN doc
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://learn.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.
Not all bindings support PerSession
mode like basicHttpBinding
that supports Percall
mode by default.
精彩评论