2012-01-13 3 views
0

여러 개의 액세스 권한으로 내 웹 사이트에 스트레스를 가하고 싶습니다. 그렇게하기 위해 웹 사이트를 1000 번 호출하는 Windows 기반 응용 프로그램을 만들었습니다. 불행히도 2 통화에서만 작동합니다. 계속하기 전에 IDisposable 경우 (즉, 응답)를 폐기ASP.NET 응용 프로그램을 테스트 할 수있는 Windows 기반 응용 프로그램

static void myMethod(int i) 
    { 
     int j = 0; 

     try 
     { 
      string url = ""; 
      WebRequest wr = null; 
      HttpWebResponse response = null;         
      url = String.Format("http://www.google.com"); 
      wr = WebRequest.Create(url); 
      //wr.Timeout = 1000; 
      response = (HttpWebResponse)wr.GetResponse();     
      MessageBox.Show("end"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(j.ToString() + " " + ex.Message); 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < 1000; i++) 
     { 
      ThreadStart starter = delegate { myMethod(i); }; 
      Thread thread = new Thread(starter); 
      thread.Start();    
     } 

    } 
+0

두 번 시도한 후에 어떻게됩니까? 예외가 발생 했습니까? – granaker

+1

이것이 작동했다면 1000 개의 메시지 박스를 생성 할 수 있다는 것을 알았습니까? 또한 - 백그라운드 스레드에서 messagebox를 여는 것이 허용되는지 확실하지 않습니다. 아무도 이것을 확인할 수 있습니까? –

+2

왜 이미 사용 가능한 것을 시도하고 재발 명해야합니까? http://support.microsoft.com/kb/231282 http://loadimpact.com/ – Lloyd

답변

0

보십시오 :이 코드입니다.

static void myMethod(int i) 
{ 
    int j = 0; 

    try 
    { 

     string url = String.Format("http://www.google.com"); 
     WebRequest wr = WebRequest.Create(url); 
     using(HttpWebResponse response = (HttpWebResponse)wr.GetResponse()) 
     using(Stream responseStream = wr.GetResponseStream()) 
     { 
      //handle response/response stream 
     }     
     MessageBox.Show("end"); //this won't scale!!! 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(j.ToString() + " " + ex.Message); 
    } 
} 
+0

이 변경 사항은 감각. –

+0

@WAPGuy : 정말요? 당신에게 이해가되지 않는 것은 무엇입니까? 요청 응답의 마감을 시작하도록 GC를 남겨 두는 것이 좋습니다. – spender

+0

@WAPGuy 그런 말을하려고한다면, 왜 그렇게 생각하는지 우리 모두에게 깨우쳐야합니다. –

1

기본적으로 HttpRequest은 동일한 호스트에 2 개의 연결 만 허용합니다. DefaultConnectionLimit 속성을 설정하여이를 변경할 수 있습니다.

+1

사실. OP가 예기치 않게 연결 제한에 어긋나는 이유는 응답을 닫거나 처리하지 않아 GC가 제공 될 때만 닫히는 ServicePoint에 열려있는 (그러나 참조되지 않은) 연결을 남기지 않기 때문입니다. 또한 연결의 다른 쪽 끝은 꽤 무례합니다 ... 응답을 읽지 않고 연결을 끊고 즉시 연결을 닫지 마십시오. – spender

관련 문제