Windows-Server-2008
HttpWebRequest 中的“無法連接到遠端伺服器失敗”
我正在使用 VSTS 2008 + C# + .Net 3.5 開發控制台應用程序,並將請求發送到另一台伺服器(Windows Server 2008 上的 IIS 7.0)。我發現當請求執行緒數很大(例如 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; } }
提前謝謝,喬治
您可能遇到了 MaxConnection 問題。看看提高 .NET 應用程序性能和可擴展性的第 10 章,特別是關於連接的這一部分。
您可能需要在 machine.config 中添加一個部分,如下所示:
<connectionManagement> <add address="*" maxconnection="12"/> </connectionManagement>
這在MSDN Library中有詳細說明。