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 : IMessagingServiceThis
property can be set to any of the following ConcurrencyMode enumeration values:
SingleA single request thread has access to the service object at a given time.
ReentrantA single request thread has access to the service object, but the thread can exit the service and reenter without ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access