Я всегда думал, что установка InstanceContextMode в PerCall делает режим concurrency нерелевантным, даже если используется привязка к сеансу, такая как net.tcp. Это то, что MSDN говорит http://msdn.microsoft.com/en-us/library/ms731193.aspx "В PerCallinstancing, concurrency не имеет значения, потому что каждое сообщение обрабатывается новым экземпляром InstanceContext, и поэтому в экземпляре-экземпляре активен не более одного потока."
Но сегодня я проходил через книгу Juval Lowy Программирование WCF Services, и он пишет в главе 8
Если служба для каждого вызова имеет сеанс транспортного уровня, одновременная обработка вызовов разрешена, является продуктом услуги concurrency. Если служба настроена с помощью ConcurrencyMode.Single, одновременная обработка ожидающих звонки не снижаются, а вызовы отправляются по одному. [...] Я считаю, что это ошибочный дизайн. Если услуга сконфигурирован с ConcurrencyMode.Multiple, одновременная обработка позволил. Вызовы отправляются по мере их поступления, каждый в новый экземпляр, и выполнять одновременно. Интересное замечание здесь состоит в том, что в заинтересованность в переходе, рекомендуется настроить услуга за вызов с ConcurrencyMode.Multiple - сам экземпляр будет по-прежнему быть потокобезопасным (так что вы не понесете синхронизацию ответственность), но вы разрешите одновременные вызовы от одного и того же клиента.
Это противоречит моему пониманию и тому, что говорит MSDN. Что правильно? В моем случае у меня есть служба WCF Net.Tcp, которая использовала мои многочисленные клиентские приложения, которые создают новый прокси-объект, выполняет вызов, а затем немедленно закрывает прокси-сервер. Услуга имеет PerCall InstanceContextMode. Получу ли я улучшенную пропускную способность, если я изменил InstanceContextMode на Multiple, не хуже, чем на percall?