Синхронизация операций отличается от синхронизации классов - PullRequest
0 голосов
/ 07 марта 2011

У меня есть класс WebService (.svc) с

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]

, и я хочу, чтобы некоторые из его операций были множественными, а не единичными, а некоторые - единичными.

Как это сделать?

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

Вы можете пометить класс как 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()
    {
        // ...
    }
 }
1 голос
/ 07 марта 2011

Вы не можете использовать две разные конфигурации параллелизма в одном сервисе.Как видите, атрибут называется ServiceBehavior = он влияет на весь сервис.Если вы хотите два разных поведения, вы должны разделить свой код на две службы.Также в вашем атрибуте не указано InstanceContextMode, поэтому есть вероятность, что установка ConcurrencyMode в Multiple не будет иметь никакого эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...