У меня есть класс WebService (.svc) с
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
, и я хочу, чтобы некоторые из его операций были множественными, а не единичными, а некоторые - единичными.
Как это сделать?
Вы можете пометить класс как ConcurrencyMode.Multiple, создать частное поле синхронизации и заблокировать это поле для входов методов, которые должны быть одиночными.
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] class SomeSvc : ContractInterface { private readonly Object _syncLock = new Object(); // this method is ConcurrencyMode.Single public String SingleMethod1() { lock (_syncLock) { // method code here } } // this method is ConcurrencyMode.Single public String SingleMethod2() { lock (_syncLock) { // method code here } } // this method is ConcurrencyMode.Multiple public String MultipleMethod() { // ... } }
Вы не можете использовать две разные конфигурации параллелизма в одном сервисе.Как видите, атрибут называется ServiceBehavior = он влияет на весь сервис.Если вы хотите два разных поведения, вы должны разделить свой код на две службы.Также в вашем атрибуте не указано InstanceContextMode, поэтому есть вероятность, что установка ConcurrencyMode в Multiple не будет иметь никакого эффекта.
ServiceBehavior
InstanceContextMode
ConcurrencyMode
Multiple