Почему WCF ограничивает одновременные подключения к 5?
У меня есть служба WCF (basicHttpBinding), размещенная на II7 в Vista, и я ожидаю, что вы будете обрабатывать множество запросов одновременно. Я пытаюсь загрузить тестовый сервис, разбирая 200 потоков в тестовом приложении и вызывая службу WCF. Я запустил это тестовое приложение на том же компьютере, что и сервер, а также несколько других компьютеров, и я всегда получаю тот же результат - не более 5 работников. Является ли это узким местом WCF, HTTP или IIS?
Ответы
Ответ 1
Это функция предотвращения атак типа "отказ в обслуживании". WCF предназначен для обеспечения безопасности.
Проверьте поведение службы, посмотрите в msdn для конфигурации maxConcurrentCalls и maxConcurrentSessions. Я думаю, что предел равен 10, но я мог ошибаться.
Ответ 2
Вот хорошая статья об управлении экземплярами WCF из журнала MSDN от Juval Lowy:
http://msdn.microsoft.com/en-us/magazine/cc163590.aspx
Проблема с июня 2006 года (в случае, если MSDN снова уничтожит ссылки).
В нем описываются методы и настройки для управления жизненным циклом службы (одним из них является дросселирование) и показывает, какие параметры применяются для увеличения количества параллельных соединений.
Ответ 3
WCF по умолчанию защищен. Это означает, что настройки по умолчанию ограничивают то, что вы можете сделать со своей службой WCF, чтобы избежать подобных атак типа "отказ в обслуживании". Это отлично подходит для интернет-сервисов, но иногда это может укусить вас. В зависимости от того, какие привязки и поведение вы используете, это может быть установка в любом из них.
Здесь приведен обзор этих настроек - для этого вам потребуются некоторые эксперименты, чтобы определить, что именно вас кусает.
Ответ 4
Нет, это только настройки дросселирования по умолчанию в WCF. Он настроен в элементе serviceThrottling поведения в файле конфигурации службы, который имеет атрибут maxConcurrentSessions. По умолчанию 5, но вы можете установить его в нужное вам положение.
Ответ 5
Как и для .NET 4.5, число подключений по умолчанию - (100 * число процессоров) - свойство ServiceThrottlingBehavior.MaxConcurrentSessions