Сервисные экземпляры в WCF - PullRequest
0 голосов
/ 01 декабря 2009

Я использую perfmon для проверки своего служебного поведения. Я запускаю 6 экземпляров клиентского приложения на отдельных компьютерах и отправляю запросы на сервер в 120 потоков (по 20 потоков на клиентское приложение).

Я изучил счетчики, и максимальное количество экземпляров (я использую модель PerSession и задаю число экземпляров равным 100) равно 12, что я считаю странным, поскольку время отклика от службы вращается примерно 120 секунд ... of экземпляров заставит WCF создавать больше экземпляров, и в результате время отклика будет быстрее.

Есть идеи, почему WCF не создает еще больше сервисов?

Спасибо, Павел

Ответы [ 4 ]

1 голос
/ 03 декабря 2009

Уффф, последняя попытка понять этот глупый WCF.

Что я сделал сейчас:

  • создать клиента, который запускает 20 потоков, каждый поток отправляет запросы на обслуживание в цикле. Счетчик производительности на сервере утверждает, что только 2 экземпляра объекта службы создаются постоянно. Среднее время запроса составляет около 40 секунд (я начинаю измерять до вызова прокси и заканчиваю после возврата вызова).

  • изменить этот клиент, чтобы запустить 5 потоков и запустить 4 экземпляра этого клиента (для имитации поведения 20 потоков из предыдущего примера). Монитор производительности показывает, что 8 экземпляров объекта службы создаются постоянно. Среднее время запроса составляет 20 секунд.

Может кто-нибудь сказать мне, что происходит? Я думал, что есть проблема с сервером, что он не хочет обрабатывать больше запросов одновременно, но, очевидно, это клиент, который вызывает ажиотаж и не хочет отправлять больше запросов одновременно ... Возможно, есть какой-то параметр конфигурации, который ограничивает отправку клиентом более двух запросов одновременно ... (буфер, регулирование и т. д.)

Фабрика каналов создается в каждом потоке.

1 голос
/ 01 декабря 2009

Службы WCF по умолчанию регулируются - это поведение службы, которое можно легко настроить.

См. Документы MSDN по ServiceThrottling .

Вот значения по умолчанию:

<serviceThrottling 
    maxConcurrentCalls="16"   
    maxConcurrentInstances="Int.MaxValue"
    maxConcurrentSessions="10" />

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

0 голосов
/ 01 декабря 2009

В привязке к вашему сервису вы установили maxconnections? Звонки на соединение будут блокироваться после достижения лимита.

Я думаю, по умолчанию 10.

http://msdn.microsoft.com/en-us/library/ms731379.aspx

0 голосов
/ 01 декабря 2009

Возможно, вы захотите обратиться к этой статье и откорректировать свою конфигурацию WCF (в частности, maxConnections), чтобы получить желаемое количество соединений.

Попробуйте использовать что-то вроде http://www.codeplex.com/WCFLoadTest для запуска службы.

Кроме того, perfmon покажет вам только это. Если вы хотите отладить службу WCF, вам следует взглянуть на SvcTraceViewer и SvcConfigEditor в Windows SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...