2011-07-29 2 views
0

첫 번째 메서드에서 단추를 클릭하면 루프 내에서 비동기 http 요청이 생성됩니다. 그러나 비동기 콜백 함수에 매개 변수를 전달할 수 없습니다. 내가 원하는 것은 POST 메서드를 사용하여 for 루프 내부에 ID를 보내려고합니다.HttpWebRequest AsyncCallback 매개 변수 문제

void Button3Click(object sender, EventArgs e) 
    {    
     for(int i = Convert.ToInt32(startno3.Text); i<Convert.ToInt32(endno3.Text); i++) {     
      ASCIIEncoding encoding=new ASCIIEncoding(); 
      string postData="id=1";     
      qstr3 = encoding.GetBytes(postData);     

      HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/ornek/1.php"); 
      if(key1.Text!="") { 
       request.Headers.Add("Cookie", "PHPSESSID=" + key1.Text);      
      } 
      request.Method = "POST"; 
      request.ContentType="application/x-www-form-urlencoded"; 
      request.ContentLength = data.Length; 
      IAsyncResult asyncResult = request.BeginGetResponse(new AsyncCallback(EndScanFeeds), request);  
     } 
    } 

    public void EndScanFeeds(IAsyncResult result) { 
     HttpWebRequest request = null; 
     HttpWebResponse response = null; 
     Stream stream = null; 
     StreamReader streamReader = null; 
     try { 
      request = (HttpWebRequest)result.AsyncState; 
      response = (HttpWebResponse)request.EndGetResponse(result); 
      stream = response.GetResponseStream(); 
      streamReader = new StreamReader(stream); 
      string feedData = streamReader.ReadToEnd(); 
      response.Close(); 
      stream.Close(); 
      streamReader.Close(); 
      MessageBox.Show(feedData); 

     } 
     catch(Exception ex) { 
      throw(ex); 
     } 
     finally { 
      if(response != null) 
       response.Close(); 
      if(stream != null) 
       stream.Close(); 
      if(streamReader != null) 
       streamReader.Close(); 
     } 
    } c 

답변

0

당신은 HttpWebRequest를 (당신이 그것을 설정 한 후 qstr3와 아무것도하지 않는)에 쿼리 문자열 매개 변수로 ID를 추가해야합니다.

ContentType 및 ContentLength를 설정하는 동안 실제 콘텐츠는 전달하지 않습니다.

그러나 걱정하지 말라면 (잠재적으로) 많은 간단한 비동기식 HttpWebRequests를 병렬로 실행하는 것이 좋습니다. 상당수가 있다면 나쁜 일이 일어나기를 기대합니다.

올바른 접근 방법인지 생각해보십시오. 한 번에 하나 이상의 ID를 가져 오도록 1.php를 수정할 수 있습니까?

0

매개 변수를 함수에 전달할 수없는 이유는 무엇입니까? requestBeginGetResponse의 두 번째 매개 변수로 사용하고 있습니다. 매개 변수와 요청에 대한 참조를 보유하고있는 대신 사용자 지정 개체를 실제로 전달할 수 있으며 HttpWebRequest으로 캐스팅하지 않고 result.AsyncState을 해당 개체 유형으로 캐스팅 할 수 있습니다.

실제로 ID를 보내려는 경우 비동기 request.BeginGetResponse 작업 (예 : GetRequestStream())을 요청하고 거기에 데이터를 쓰거나 비동기 작업으로 요청하기 전에 요청 스트림을 가져와야합니다.