2009-10-20 2 views
1

VSTS 2008 + C# + .Net 3.5를 사용하여 콘솔 응용 프로그램을 개발하고 다른 서버 (Windows Server 2008의 IIS 7.0)에 요청을 보냅니다. 요청 스레드 수가 크면 IIS 7.0에서 http 503 오류로 응답합니다. 어떤 아이디어가 잘못되었거나 IIS 7.0이 더 많은 요청을 처리하도록 조정하는 방법은 무엇입니까? 여기 C#에서 HTTP 요청 오류 (Http 503) 보내기

내가 처리하는 데 걸린 IIS 관리하지만, 웹 서버의 용량은 다양한 요인에 따라 달라집니다 CPU 기능, 사용 가능한 메모리, 요청 처리 시간에 대해 잘 모르는

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

    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; 
    } 
} 
+1

정말로 100 개의 동시 요청을하고 있습니까? – RobV

+0

예, 물론입니다. 너 왜 그런 의심스러운거야? :-) – George2

답변

2

503 상태 코드는 서비스를 사용할 수 없음을 나타내며 일시적으로 과부화되거나 너무 바쁠 때 서버에서 발행 할 수 있습니다.

마찬가지로 Bhushan은 많은 요인이 서버가 요청을 처리 할 수있는 능력에 영향을 미칠 수 있다고 말합니다.

MSDN에서 IIS 구성을 조회하거나 Server Fault (서버 관리자는 StackOverflow와 동일한 기능)에서 질문을 시도해보십시오. 구성 파일에서 허용되는 동시 요청의 양을 늘릴 필요가있을 것입니다. 그러나 여전히 서버의 기능에 의해 제한을받는 경우에도 마찬가지입니다. 기본적으로 http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/1f863f20-09f9-49a5-8eee-17a89b591007/
이 시도 찾고 편집

2

제한됩니다 : 또한

HttpWebRequest를 만들 수있는 하나의 호스트에 최대 동시 요청을 늘리는 방법에 대한이 MSDN 포럼 포스트를 살펴 서버 연결 및 대역폭 제한 구성을위한 http://www.server7.iis.net/ConfigReference/system.applicationHost/sites/site/siteDefaults/limits

+0

당신이 언급 한 것은 클라이언트 측 제한입니다 (이미 클라이언트 측 최대 연결을 20,000으로 설정했습니다) . 내가 구성해야하는 것은 서버 측 제한이라고 생각합니까? – George2

+1

은 IIS7 설정과 비슷한 모양의 링크를 추가했습니다. – RobV

+0

이 문서에서 기본 최대 동시 연결 수는 4294967295입니다. 설정? – George2

1

내 코드입니다 IIS가 한 번에 처리 할 수있는 요청 수를 제한하는 구성을 갖고 있는지 여부는 알 수 없습니다. 서버가 처리 할 수있는 한계가 언제 무엇이든간에. 위의 요인에 따라 예상 부하를 처리하는 데 필요한 많은 용량을 제공해야합니다.

+0

고마워요! 작업 관리자를 열고 CPU/메모리/네트워크가 모두 작은 부분 (50 % 미만)으로 소비되는 것을보십시오. 더 이상 튜닝 할 아이디어가 있습니까? – George2

+0

감사! 나는 비슷한 질문을 가지고있다. http://stackoverflow.com/questions/1598748/unable-to-connect-to-remote-server-fail-in-httpwebrequest – George2