Теоретически, сервис не должен знать о состоянии клиента.Но он может настаивать на том, кого обслуживать, диктуя требования аутентификации, ограничения параллелизма и т. Д.
Если вы хотите, чтобы одновременно обслуживался только один клиент, вы можете просто выбрать режим единого параллелизма.
Например.
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Single)]
public class CalculatorService : ICalculatorConcurrency
Это обеспечит одновременную обработку только одного клиентского запроса.Следующая ссылка также может вам помочь.
http://msdn.microsoft.com/en-us/library/ms731193.aspx
РЕДАКТИРОВАТЬ
Если вы считаете, что действия пользователя по сохранению открытого канала мешаютработа другого пользователя, это может не быть обычным случаем.
Поскольку вызов каждого пользователя рассматривается как отдельный сеанс.По умолчанию вызовы WCF считаются созданными для каждого вызова.
Если вы хотите сохранить данные между вызовами пользователя, вы можете выбрать режим экземпляра perSession.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class CalculatorService : ICalculatorInstance
Это обеспечитчто у каждого пользователя будет экземпляр службы, который не будет мешать обслуживанию другого пользователя.
Вы можете установить режим параллелизма соответственно, то есть Multiple или Reentrant, если хотите.Даже если режим параллелизма является единичным, когда ответ отправляется обратно пользователю, служба будет готова обслужить следующего пользователя.Клиент не будет ждать, чтобы закрыть соединение.Подключение пользователя было бы полезно только для поддержания сеанса в рабочем состоянии.