Concurrency
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 PerSession
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, PerSession
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
here:
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single
)]
public class MessagingService : IMessagingService
This
property can be set to any of the following ConcurrencyMode
enumeration values:
Single
A single request thread has access to the service object at a given time.
Reentrant
A single request thread has access to the service object, but the thread can exit the service and reenter without ...
Get Learning WCF now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.