Режим параллелизма имеет область действия для экземпляра контекстного режима. Если вы установите ConcurrencyMode
на Single
, вы просто скажете WCF, что каждый экземпляр службы может обрабатывать только один параллельный запрос - Single
также является значением по умолчанию для ConcurrencyMode
.
Если вы не сконфигурируете также InstanceContextMode
на Single
(= вы сделаете свой сервис синглтоном), ваш хост сервиса будет порождать новый экземпляр сервиса либо для каждого запроса (привязки без сохранения состояния, такие как BasicHttpBinding
или WebHttpBinding
), либо для каждый подключенный прокси-сервер (полные привязки типа NetTcpBinding
, NamedPipeBinding
и некоторые конфигурации WsHttpBinding
). В первом случае ConcurrencyMode
не имеет никакого эффекта, потому что каждый экземпляр службы используется только для обработки одного запроса = запросы от любого количества клиентов могут обрабатываться одновременно. В последующем случае ConcurrencyMode.Single
сообщает, что запросы от одного клиентского прокси обрабатываются в последовательном порядке, но запросы от нескольких клиентских прокси могут обрабатываться одновременно. Каждый открытый контракт требует отдельной конечной точки, а каждая потребляемая конечная точка на клиенте требует отдельного экземпляра прокси-сервера, поэтому в этом случае прокси-сервер для каждого контракта будет иметь отдельный экземпляр службы.
В текущей конфигурации только регулирование службы контролирует, сколько одновременно работающих клиентов может потреблять вашу службу.
Как только вы установите InstanceContextMode
на Single
, у вас действительно будет служба, которая сможет обрабатывать только один запрос за один раз. Количество реализованных контрактов не имеет значения, потому что все контракты, представленные в конечных точках для одного сервиса, в этом случае обрабатываются одним экземпляром сервиса, который принимает только один параллельный запрос.