Я пытаюсь смоделировать X число одновременных запросов для службы WCF и измерить время ответа для каждого запроса.Я хочу, чтобы все запросы попадали в Сервис более или менее одновременно.
В качестве первого шага я создал X потоков, используя класс Thread, и вызвал метод Start.Чтобы синхронизировать все запросы, при обратном вызове потока я открываю соединение и получаю Monitor.Wait, чтобы удержать запрос от запуска до тех пор, пока все потоки не будут созданы и запущены.Как только все потоки запущены, я вызываю Monitor.PulseAll для запуска вызова метода на клиентском прокси WCF.
Когда я выполняю запросы таким образом, я вижу огромную задержку в ответе.Запрос, который занимает всего несколько миллисекунд, занимает около секунды.
Я также заметил огромную задержку между временем отправки запроса и временем, когда он был получен в методе службы.Я измерил это путем отправки метки времени клиента в качестве значения параметра в метод сервиса для каждого запроса.
У меня есть следующие настройки.Предположим, что «X» соответствует числу запросов, которые я хочу выполнить.Также обратите внимание, что со следующими настройками я не получаю никаких проблем отказа в обслуживании.
- Цепочка вызовов выглядит следующим образом: Клиент-> Сервис1-> Сервис2-> Сервис3
- ВсеСлужбы PerCall с параллелизмом установлены на несколько.
- Регулирование установлено на X Параллельных вызовов, X Параллельных Экземпляров.
- MaxConnections, ListenBacklog на Сервисе на X.
- Мин. / Макс. Потоки ThreadPool установлены на X на обоих Клиентахи Сервер (я применил исправление, предоставленное Microsoft).
Я не уверен, что время отклика, которое я измеряю, точное.Я упускаю что-то очень тривиальное?
Любые материалы по этому вопросу будут очень полезны.
Спасибо.
-Кришнан