Проблема: У меня есть служба WCF, которую я пытаюсь протестировать с помощью JMeter , и я заметил, что время отклика службы значительно увеличивается, когда выполняется больше параллельных запросов.послал.Первый параллельный запрос возвращается в ожидаемое время, но каждый последующий запрос занимает все больше времени, так что последний запрос может удвоиться по сравнению с первым.
Вот снимок экрана выполненияв JMeter: ![Performance Test Results](https://i.stack.imgur.com/fbW6x.png)
Код: Я сократил службу WCF до минимума, поэтому весь метод службы просто содержит Thread.Sleep () для имитации чуть более длинногозапущенный процесс.
[ServiceContract]
public interface IAvailabilityService
{
[OperationContract]
Thing GetSomething(Request request)
}
[ServiceBehavior(
InstanceContextMode = InstanceContextMode.PerCall,
AddressFilterMode = AddressFilterMode.Any)]
public class AvailabilityService : IAvailabilityService
{
public Thing GetSomething(Request request)
{
Thread.Sleep(20000);
return new Thing();
}
}
Служба настроена следующим образом:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="MyService.AvailabilityService"
behaviorConfiguration="DefaultServiceBehavior">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="bindingConfig"
contract="MyService.IAvailabilityService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="bindingConfig">
<security mode="None">
<transport clientCredentialType="None" />
<message establishSecurityContext="false" />
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
Я также попытался настроить службу для работы в качестве других стандартных привязок HTTP.Также я попытался повысить уровни регулирования службы в конфигурации привязки (хотя я уверен, что для 20 запросов значения по умолчанию должны быть в порядке).
Настройка службы: Службаработает в IIS 6.1 на Windows Server 2008 R2 в .NET 3.5.Хотя мы также видели такое же поведение в IIS 7.
Трассировка службы: Я включил трассировку, и это показало, что службе всегда требуется около 20 секунд для обработки каждого ответа, ноПолученные байты соединения имеют ступенчатое время начала, которое отражает разницу во времени, сообщаемую JMeter.
Означает ли это отставание в активации службы IIS?Это не может быть проблемой параллелизма в WCF, так как вы ожидаете, что последний поток будет в 20 раз быстрее первого.
Заранее спасибо
Iain
ОБНОВЛЕНИЕ Мне удалось получить непротиворечивый ответ, увеличив число рабочих процессов в IIS, чтобы они соответствовали числу одновременных запросов, которые я хочу, чтобы служба обрабатывала (20) - делая сайт WebСад .Хотя меня удивляет, что вам нужно сделать это, чтобы получить постоянный уровень производительности от WCF.
Я оставлю вопрос открытым еще пару дней на случай, если у кого-нибудь появятся лучшие идеи.