2009-04-28 5 views
3

Мне нужно создать службу WCF, которая позволяет только одному клиенту одновременно. Все остальные запросы должны быть отклонены, и клиент должен повторить попытку позже. Для завершения запроса потребуется около минуты.WCF: служба, которая разрешает только одному клиенту и отклоняет другие.

Я пробовал:

[ServiceBehavior(IncludeExceptionDetailInFaults=true, 
        InstanceContextMode=InstanceContextMode.Single, 
        ConcurrencyMode=ConcurrencyMode.Single)] 

но если запрос на обслуживание несколько раз (с использованием нескольких потоков) в клиенте, я получаю исключение тайм-аута на 3 запроса, но сервис на самом деле выполнить Обработка 3-го запроса!

+0

Я считаю, что эти настройки делают вызовы, которые будут поставлены в очередь и будут выполняться один за другим (так как услуги уже получили их), что вам нужно, что вызов возвращает ошибку, если есть другое в правильном процессе ?. У меня есть аналогичная проблема, когда мне нужно, чтобы один клиент использовал канал wcf, а любые другие соединения были отказаны с кодами ошибок, используя указанные вами настройки, а приведенный ниже ответ все же позволит подключиться и оканчивает вызовы. –

ответ

7

Вы также можете проверить поведение «ServiceThrottling», которое позволяет указать на стороне сервера количество параллельных экземпляров, одновременные вызовы и параллельные сеансы, которые вы хотите поддерживать, - установить их все на 1, и вы должны иметь поведение.

<behaviors> 
    <serviceBehaviors> 
    <behavior name="Throttled"> 
     <serviceThrottling maxConcurrentCalls="1" 
      maxConcurrentSessions="1" 
      maxConcurrentInstances="1" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Марк

 Смежные вопросы

  • Нет связанных вопросов^_^