Instances and Concurrent Access
Using the same proxy, a single client can issue multiple concurrent calls to the service. The client could use multiple threads to invoke calls on the service, or the client could issue one-way calls in rapid succession. In both of these cases, concurrent processing of the calls from the same client is a product of the service’s configured instancing mode, the service’s concurrency mode, and the configured delivery; that is, the binding type and the session mode.
Per-Call Services
In the case of a per-call service, if there is no transport-level session; that is, if the call is made over the BasicHttpBinding, or over any of the WS bindings when the contract is configured for SessionMode.NotAllowed, or for SessionMode.Allowed yet without security and reliable messaging, concurrent processing of calls is allowed. Calls are dispatched as they arrive, each to a new instance, and execute concurrently. This is the case regardless of the service concurrency mode. I consider this to be the correct behavior.
If the per-call service has a transport-level session—that is, the binding is either TCP or IPC, or a WS binding when the contract has its SessionMode set to either SessionMode.Allowed with security or reliable messaging, or SessionMode.Required— concurrent processing of calls is a product of the service concurrency mode. If the service is configured with ConcurrencyMode.Single, then concurrent processing of the pending calls is not allowed. While this ...