Concurrency issues arise when multiple
threads attempt to access the same resources at runtime. When requests arrive to a service,
the service model dispatches the message on a thread from the thread pool. Certainly, if
multiple clients call the same service, multiple concurrent requests can arrive at the
service. The particular service object handling each request is based on the instancing mode
for the service. For
PerCall services, a new service
object is granted for each request. For
services, the same service object receives requests from the same client. For
Single instancing mode, all client requests are sent to the same
singleton service object. Based on this alone,
services are at risk of concurrent access when the client is multithreaded, and
Single services are perpetually at risk.
By default, only one request thread
is granted access to any service object, regardless of the instancing mode. The concurrency
setting for a service is controlled by the
ConcurrencyMode property of the
ServiceBehaviorAttribute. The default setting is
Single, as shown
ConcurrencyMode.Single)] public class MessagingService : IMessagingService
property can be set to any of the following
ConcurrencyMode enumeration values:
A single request thread has access to the service object at a given time.
A single request thread has access to the service object, but the thread can exit the service and reenter without ...