2012-06-11 3 views
0

wp7에 로그인하여 위키 백과에 로그인하고 페이지를 번역하는 데 도움이되는 앱을 만들려고합니다. mediawiki API를 통해 로그인 할 수 없기 때문에 저는 처음부터 막혔습니다. 코드의 관련 부분은 다음과 같이 진행됩니다wp7의 api에 의해 mediawiki에 로그인

 data.Append("action=login&lgname" + HttpUtility.UrlEncode(textBox1.Text)); 
     data.Append("&lgpassword=" + HttpUtility.UrlEncode(passwordBox1.Password)); 

     request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback),request); 
     request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request); 

     public void GetRequestStreamCallback(IAsyncResult asynchronousResult) 
     { 
      HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 
      Stream postStream = request.EndGetRequestStream(asynchronousResult); 
      byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString()); 
      postStream.Write(byteData, 0, data.Length); 
      postStream.Close(); 
     } 
     private static void GetResponseCallback(IAsyncResult asynchronousResult) 
     { 
      HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 

      HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); 
      Stream streamResponse = response.GetResponseStream(); 
      StreamReader streamRead = new StreamReader(streamResponse); 
      string responseString = streamRead.ReadToEnd(); 

      streamResponse.Close(); 
      streamRead.Close(); 

      response.Close(); 
    } 

문제는 다음과 같습니다

GetRequestStreamCallback에 내가 주요 기능에서 데이터 문자열을 전달할 수 없습니다. 어떻게해야합니까?

GetResponseCallback 함수에서 나중에 응답 문자열을 반환하여 나중에 출력 할 수 있습니까?

답변

0

사실 두 가지 비동기 작업이 차례로 진행됩니다. 완료되기 전에 BeginXxx 메서드가 반환된다는 것을 기억해야합니다. 따라서 귀하의 경우에는 요청 스트림에 쓰기를 요청해야합니다. 즉시 응답을 요청하면 나쁜 일이 일어날 것입니다.

여기에는 opensource code에있는 것과 같은 다른 예,보고 가능 가치 - 당신이 유사하다 여기 EndGetRequestStream

+0

내 코드에 의해 반환되는 스트림에 작성을 완료 할 때까지 당신이 일반적으로 BeginGetResponse를 호출하지 않는 것을 확인할 수 있습니다 시작 메소드에 대한 msdn 설명서에 제공된 이름으로 변경하십시오. get 메소드의 begin 메소드를 변경할 수 있습니까? Silverlight는 인식하지 못합니다. –

+0

신경 쓰지 마세요. 나는 다른 방법으로 이것을 할 것이다. api.php? action = query & format = xml & meta = userinfo를 확인하고 id = "0"인 경우 로그인 페이지가로드 된 상태에서 웹 브라우저를 엽니 다. id가 다른 것이면 앞으로 이동하십시오. 나중에 어쨌든 시작 메소드를 배워야 할 것입니다. –