«Не удалось подключиться к удаленному серверу» в HttpWebRequest

Я использую VSTS 2008 + C # + .Net 3.5 для разработки консольного приложения и отправляю запрос на другой сервер (IIS 7.0 в Windows Server 2008). Я считаю, что когда количество потоков запросов велико (например, 2000 потоков), клиент получит ошибку "Не удалось подключиться к удаленному серверу при вызове response = (HttpWebResponse) request.GetResponse (). Моя путаница заключается в том, что для тайм-аута установлено большое значение, но в течение минуты я получил такое сообщение об ошибке. Я думаю, что даже если соединение действительно больше, чем может обслуживать IIS, клиент не должен получать такое сообщение о сбое так скоро, он должен получить такое сообщение после истечения времени ожидания. Любые комментарии? Есть идеи, что не так? Любые идеи, чтобы сделать больше параллельных соединений, обслуживаемых IIS 7.0?

Вот мой код, я

   class Program
    {
        private static int ClientCount = 2000;
        private static string TargetURL = "http://labtest/abc.wmv";
        private static int Timeout = 3600;

        static void PerformanceWorker()
        {
            Stream dataStream = null;
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            StreamReader reader = null;
            try
            {
                request = (HttpWebRequest)WebRequest.Create(TargetURL);
                request.Timeout = Timeout * 1000;
                request.Proxy = null;
                response = (HttpWebResponse)request.GetResponse();
                dataStream = response.GetResponseStream();
                reader = new StreamReader(dataStream);

                // 1 M at one time
                char[] c = new char[1000 * 10];

                while (reader.Read(c, 0, c.Length) > 0)
                {
                    Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
            }
            finally
            {
                if (null != reader)
                {
                    reader.Close();
                }
                if (null != dataStream)
                {
                    dataStream.Close();
                }
                if (null != response)
                {
                    response.Close();
                }
            }
        }

        static void Main(string[] args)
        {
            Thread[] workers = new Thread[ClientCount];
            for (int i = 0; i < ClientCount; i++)
            {
                workers[i] = new Thread((new ThreadStart(PerformanceWorker)));
            }

            for (int i = 0; i < ClientCount; i++)
            {
                workers[i].Start();
            }

            for (int i = 0; i < ClientCount; i++)
            {
                workers[i].Join();
            }           

            return;
        }
    }

Ответы на вопрос(4)

Ваш ответ на вопрос