Регулирование службы WCF - PullRequest
18 голосов
/ 16 марта 2010

У меня служба WCF, развернутая в консольном приложении с включенной BasicHTTPBinding и SSL. Также установлен следующий атрибут:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Я также установил режим регулирования на

<serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentSessions="2147483647"
        maxConcurrentInstances="2147483647" />

С другой стороны, я создал тестового клиента (для нагрузочного теста), который запускает несколько клиентов одновременно (несколько потоков) и выполняет транзакции на сервере. Все выглядит нормально, но на сервере загрузка ЦП не увеличивается, поэтому я добавил некоторые записи для просмотра количества одновременных вызовов на сервер и обнаружил, что он никогда не превышал 6.

Я просматривал код регистрации счетчика производительности более двух раз, и он мне кажется вполне подходящим.

Итак, я хочу спросить, в чем проблема в этой ситуации? Я еще не указал какой-либо ContextMode или ConcurrencyMode.

После этой публикации я заметил, что всякий раз, когда я запускаю другой Intance of Test Client, мой счетчик одновременных вызовов сервера увеличивается до 2, например, если я запускаю только 1 экземпляр, максимальное количество одновременных вызовов Rcvd будет равно 2, и если есть два экземпляра с одинаковым значением идет до 4 и так далее. Есть ли ограничение на количество вызовов WCF от одного процесса?

******** Добавлено 17 марта ********

Сегодня я провел еще один тест с одним тестовым клиентом (с 50 одновременными пользователями) на той же машине, на которой работает сервер. На этот раз я получаю точный результат, который я хотел показать (т.е. максимальное количество одновременных вызовов Rcvd по серверу = 50).

Но мне нужно сделать то же самое и на других машинах. Кто-нибудь может мне помочь в этом?

Ответы [ 2 ]

22 голосов
/ 19 августа 2011

Или используйте эту конфигурацию в клиенте.

<system.net>
    <connectionManagement>
      <add maxconnection = "200" address ="*" />
    </connectionManagement>
  </system.net>

Здесь 200 - лимит от клиента

18 голосов
/ 19 марта 2010

Я нашел решение: существует ограничение на подключение к ServicePointManager, которое вызывало эту проблему. Чтобы снять этот лимит, вам нужно просто установить

System.Net.ServicePointManager.DefaultConnectionLimit = X;

, где предел по умолчанию равен 2.

...