2013-01-21 20 views

回答

0

您可以使用此代碼(顯示從我的項目中的代碼)如何韓德爾:

public void sendPost(string postData, Action<MyResponse, Exception> callback, CreateResponse creater) 
     { 
      HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(UrlRequest); 
      webRequest.Method = "POST"; 
      webRequest.ContentType = "application/x-www-form-urlencoded"; 
      webRequest.Accept = "application/json"; 
      webRequest.AllowAutoRedirect = true; 
      webRequest.BeginGetRequestStream(new AsyncCallback(getRequestStreamCallback), new Request() 
      { 
       HttpRequest = webRequest, 
       PostData = postData, 
       Url = UrlRequest, 
       CallBack = callback, 
       Creater = creater 
      }); 
     } 

private void getRequestStreamCallback(IAsyncResult asynchronousResult) 
     { 
      var request = (Request)asynchronousResult.AsyncState; 
      // End the stream request operation 
      Stream postStream = request.HttpRequest.EndGetRequestStream(asynchronousResult); 

      byte[] byteArray = Encoding.UTF8.GetBytes(request.PostData); 

      // Add the post data to the web request 
      postStream.Write(byteArray, 0, byteArray.Length); 
      postStream.Close(); 

      // Start the web request 
      request.HttpRequest.BeginGetResponse(new AsyncCallback(getResponseCallback), request); 
     } 

private void getResponseCallback(IAsyncResult asynchronousResult) 
     { 
      var request = (Request)asynchronousResult.AsyncState; 
      try 
      { 

       HttpWebResponse response; 

       // End the get response operation 
       response = (HttpWebResponse)request.HttpRequest.EndGetResponse(asynchronousResult); 
       Stream streamResponse = response.GetResponseStream(); 
       StreamReader streamReader = new StreamReader(streamResponse); 
       var myResponse = streamReader.ReadToEnd(); 
       streamResponse.Close(); 
       streamReader.Close(); 
       response.Close(); 
       MyResponse response_obj = request.Creater.CreateResponseObj(); 
       using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(myResponse))) 
       { 
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(response_obj.GetType()); 
        response_obj = (GYResponse)serializer.ReadObject(stream); 
        if (request.CallBack != null) 
        { 
         request.CallBack.Invoke(response_obj, null); 
        } 
       } 
      } 
      catch (WebException e) 
      { 

       if (request.CallBack != null) 
       { 
        request.CallBack.Invoke(null, e); 
       } 
      } 
     } 
public void getInfo(string uid, Action<MyResponse, Exception> callback) 
     { 
      CreateResponse creater = new CreateResponseGetInfo(); 
      string model = "User"; 
      string method = "getInfo"; 
      Params parametrs = new Params(); 
      parametrs.Uid = uid; 
      //create yor request 
      string request = getRequestString(model, method, parametrs, Atoken);     
      sendPost(request, callback, creater); 
     } 

所以,你調用方法,其中發送請求web服務postRequester.getInfo(uid, ResponseHandler)並使用委託處理結果。

private void ResponseHandler(MyResponse result, Exception error) 
     { 
      if (error != null) 
      { 
       string err = error.Message; 
       return; 
      } 
      else 
      { 
       var infoResponse = result as ResponseGetInfo; 
       if (infoResponse != null) 
       { 
         //result processing..    
       } 

      } 
     } 
0

所有你在Windows Phone應用程序使Web請求是異步的。這意味着,您從您的應用程序發出Web請求,並附加一個處理程序來處理響應。在迴應處理程序中,您必須處理迴應並根據需要做任何事情。

檢查該鏈接Using WebClient and HttpWebRequest

相關問題