我使用VSTS 2008 + C#+。NET 3.5的開發控制檯應用程序,我請求發送到另一臺服務器(Windows Server 2008上的IIS 7.0)。我發現當請求線程數很大時(例如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 2009-10-21 06:22:04