2013-08-20 3 views
0

나는 httpWebRequest를 잘 경험하지 못했습니다. 항상 WebClient를 선호하지만 필사적 인 시간, 절박한 조치.httpWebRequest 응답 처리

private static void GetResponseCallback(IAsyncResult asynchronousResult) 
     { 
      try 
      { 
       HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 

       // End the operation 
       HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); 
       Stream streamResponse = response.GetResponseStream(); 
       StreamReader streamRead = new StreamReader(streamResponse); 
       string responseString = streamRead.ReadToEnd(); 
       // Close the stream object 
       streamResponse.Close(); 
       streamRead.Close(); 

       // Release the HttpWebResponse 
       response.Close(); 
       //allDone.Set(); 
      } 
      catch (WebException exception) 
      { 

      } 
     } 

내가 볼 수있는 (I 다음에 중단 점을 넣을 때) 그 responseString는 beautiul JSON은하지만 난 그것을 밖으로 인쇄 할 수 없습니다 (메시지 박스 등) 내 응용 프로그램이 중단됩니다있다.

처리 방법을 알려주시겠습니까? 건배

+0

보인다. 어디에서'responseString'을 사용하려고합니까? 그건 그렇고, 난 HttpWebRequest의 팬이 아니에요 ... –

+0

그래, 괜찮아. 하지만 응답을 닫기 전에 간단한 MessageBox.Show (responseString)를 시도하고 내 응용 프로그램을 중단합니다 ...하지만 중단 점을 넣으면 responseString에 내용이 있음을 알 수 있습니다. – dargod

답변

0

여기 XXXXXXXX가 서버로 전송되는 데이터와 URL을 뜻이 하나

using System.Net; 
    public void sendRequest() 
    { 
    WebRequest webRequest; 
        webRequest = WebRequest.Create(XXXXXXXXXX); 
        webRequest.Method = "POST"; 
        webRequest.ContentType = "application/x-www-form-urlencoded"; 
        webRequest.BeginGetRequestStream(newAsyncCallback(GetRequestStreamCallback), webRequest); 
    } 

    public void GetRequestStreamCallback(IAsyncResult asynchronousResult) 
      { 
        webRequest = (HttpWebRequest)asynchronousResult.AsyncState; 
        Stream postStream = webRequest.EndGetRequestStream(asynchronousResult); 
        string postData = "Test"; 
        byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
        postStream.Write(byteArray, 0, byteArray.Length); 
        postStream.Close(); 
        webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest); 
       } 
    public void GetResponseCallback(IAsyncResult asynchronousResult) 
      { 
       try 
       { 
        HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState; 
        HttpWebResponse response; 
        response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult); 
        Stream streamResponse = response.GetResponseStream(); 
        StreamReader streamReader = new StreamReader(streamResponse); 
        var Response = streamReader.ReadToEnd(); 
        streamResponse.Close(); 
        streamReader.Close(); 
        response.Close(); 
        if (Response == "") 
        { 
         //show some error msg to the user      

        } 
        else 
        {     
         //Your response will be available in "Response"       
        } 
       } 
       catch (WebException) 
       { 
        //error  
       } 
      } 

을보십시오. 당신이 바로 그것을 처리하는 것처럼

Dispatcher.BeginInvoke(() => { MessageBox.Show("OK"); }); 

마법과 매력 :)처럼 일

+0

흠. 이미 가지고있는 것과 똑같이 작동합니다. // 대신 "Response"에서 응답을받을 수 있습니다. MessageBox.Show ("OK"); 그것은 내 애플 리케이션을 깰 – dargod