Я автоматически использую ConcurrencyMode.Multiple для своих служб WCF, потому что обычно я ожидаю, что служба сможет обрабатывать несколько запросов одновременно. Мне кажется, что это наиболее интуитивное поведение для службы (т. Е. Было бы странно, если бы я позвонил в веб-службу и мне пришлось ждать 10 ожидающих запросов от других пользователей, прежде чем меня посещали).
Использование ConcurrencyMode.Single заставляет сервис обрабатывать один запрос за раз (в случае нескольких запросов они помещаются в очередь). Это, потенциально, замедлит запросы.
Но это зависит от того, что делает каждый запрос. Простые математические вычисления или манипуляции со строками будут настолько быстрыми, что накладные расходы WCF станут вашим главным узким местом. Если ваша служба запрашивает или изменяет какую-либо базу данных, время выполнения операции базы данных, скорее всего, станет вашим узким местом. Но если база данных небольшая, или вы ожидаете только небольшое количество клиентов, вы, вероятно, никогда не заметите разницу. Если вы извлекаете данные из 5 веб-служб и выполняете некоторые сложные операции слияния, это может быть проблемой.
Если вы не знаете, что у вас будет несколько одновременных запросов, запускайте с ConcurrencyMode.Отключайте, пока не будут выполнены какие-то объективные критерии производительности. Затем вам нужно будет сделать обычный бенчмаркинг, чтобы выяснить, какая часть вашего сервиса самая медленная. Ускорьте это. Если так получилось, что ConcurrencyMode.Single - медленный бит, вместо этого выберите несколько!