Вы сказали, что делаете 5 исходящих запросов для каждого входящего запроса на страницу ASP. Это 5 разных серверов или один и тот же сервер?
Вы ждете завершения предыдущего запроса, прежде чем отправить следующий? Происходит ли таймаут во время ожидания соединения или во время запроса / ответа?
Если тайм-аут происходит во время запроса / ответа, это означает, что целевой сервер находится под нагрузкой. Единственный способ выяснить, так ли это, состоит в том, чтобы запустить wireshark / netmon на одной из машин и посмотреть трассировку сети, чтобы узнать, поступает ли запрос из приложения на сервер и есть, отвечает ли целевой сервер в течение заданного времени ожидания.
Если это проблема с истощением потока, то один из способов диагностики - подключить отладчик windbg.exe к процессу w3wp.exe, когда вы начинаете получать тайм-аут. Затем загрузите расширение отладки sos.dll. И запустите команду! Threads, а затем команду! Threadpool. Он покажет вам, сколько рабочих потоков и потоков портов завершения используется / осталось. Если количество потоков #completionport или рабочих потоков низкое, это приведет к увеличению времени ожидания.
Кроме того, вы можете контролировать счетчики перфектов ASP.NET и System.net. Посмотрите, увеличивается ли очередь запросов ASP.NET монотонно - это может означать, что ваши исходящие запросы не выполняются достаточно быстро.
Извините, здесь нет простых ответов. Есть много путей, которые вы должны будете исследовать. На вашем месте я бы начал с прикрепления windbg.exe к w3wp, когда вы начнете получать тайм-ауты и будете делать то, что я описал ранее.