Я пытаюсь моделировать X количество одновременных запросов для службы WCF и измерять время отклика для каждого запроса. Я хочу, чтобы все запросы попали в Службу более или менее в одно и то же время.Имитировать одновременные вызовы клиента и время отклика WCF
В качестве первого шага я создал X число потоков, используя класс Thread, и вызывается метод Start. Чтобы синхронизировать все запросы, на обратном вызове Thread я открываю соединение и имею Monitor.Wait, чтобы удержать запрос от увольнения, пока все нити не будут созданы и не запущены. После того как все потоки запущены, я вызываю Monitor.PulseAll, чтобы вызвать вызов метода в прокси-сервере WCF.
Когда я выполняю запросы таким образом, я вижу огромную задержку в ответе. Запрос, который должен составлять всего несколько миллисекунд, занимает около секунды.
Я также заметил огромное отставание от времени отправки запроса и времени его получения по методу обслуживания. Я измерил это путем отправки штампа времени отправки клиента в качестве значения параметра для метода услуги для каждого запроса.
У меня следующие настройки. Предположим, что «X» соответствует числу запросов, которые я хочу запустить. Также обратите внимание на следующие настройки. У меня нет проблем с отказами в обслуживании.
- Цепочка вызовов выглядит следующим образом, Client-> Service1-> Service2-> service3
- Все услуги являются PerCall с параллелизмом устанавливается на несколько.
- Дросселирование для X одновременных вызовов, X одновременных экземпляров.
- MaxConnections, ListenBacklog для службы X.
- Min/Max Threads ThreadPool установлен на X как на клиенте, так и на сервере (я применил исправление, предоставленное Microsoft).
Не уверен, что время отклика, которое я измеряю, является точным. Я пропустил что-то очень тривиальное?
Любые входы в это могли бы помочь.
Спасибо.
-Krishnan
Вы пробовали это с помощью X = 1? Изменяется ли задержка ответа при добавлении потоков? –
Да, да. Для X = 1 время отклика равно ответу, который я получаю, когда я выполняю запросы последовательно без потоков. И еще одна информация. Я использую TCP Binding. – Krishnan