Я использую VSTS 2008 + C# + .Net 3.5 для разработки консольного приложения, и я отправляю запрос на другой сервер (IIS 7.0 на Windows Server 2008). Я обнаруживаю, что если количество потоков запросов велико (например, потоки 2000), клиент будет получать сообщение об ошибке «Не удается подключиться к удаленному серверу» при вызове response = (HttpWebResponse) request.GetResponse(). Мое замешательство - у меня есть установить таймаут, чтобы быть большой величиной, но я получил сообщение об ошибке в течение минуты. Я думаю, что даже если соединение действительно больше, чем то, что может обслуживать IIS, клиент не должен так быстро получать сообщение об ошибке, он должен получить такое сообщение после периода ожидания. Любые комментарии? Какие-нибудь идеи, что не так? Любые идеи по увеличению количества параллельных соединений, которые обслуживаются IIS 7.0?«Не удалось подключиться к удаленному серверу сбой» в HttpWebRequest
Вот мой код,
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;
}
}
Я обновил свой ответ, вы можете вставить полное исключение? – Kev