Silverlight - HttpWebRequest - WebClient - POST/GET

Lorsque l'on commence à développer des applications Silverlight nous sommes très rapidement confronté à la gestion Client/Serveur. Comment communiquer avec le serveur au travers de scripts PHP (par exemple).

Voilà donc une méthode simple et Asynchrone (on ne fige pas l'application, on peut continuer ses actions durant la requète au serveur).

  • // Ligne initiatrice de la communication avec le serveur
  • HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(POST_ADDRESS, UriKind.Absolute));   
  • request.Method = "POST";   
  • request.ContentType = "application/x-www-form-urlencoded";   
  • request.BeginGetRequestStream(new AsyncCallback(RequestReady), request);   
  •   
  • // Méthode asynchrone permettant d'émettre une requète
  • // au serveur avec en paramètre des variables en POST.
  • void RequestReady(IAsyncResult asyncResult)   
  • {   
  •     HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;   
  •     Stream stream = request.EndGetRequestStream(asyncResult);   
  •   
  •     // Hack for solving multi-threading problem   
  •     // I think this is a bug   
  •     this.Dispatcher.BeginInvoke(delegate()   
  •     {   
  •         // Send the post variables   
  •         StreamWriter writer = new StreamWriter(stream);   
  •         writer.WriteLine("key1=value1");   
  •         writer.WriteLine("key2=value2");   
  •         writer.Flush();   
  •         writer.Close();   
  •   
  •         request.BeginGetResponse(new AsyncCallback(ResponseReady), request);   
  •     });   
  • }   
  •   
  • // Méthode asynchrone permettant de récupérer
  • // la réponse du serveur à notre requète.
  • void ResponseReady(IAsyncResult asyncResult)   
  • {   
  •     HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;   
  •     HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);   
  •   
  •     this.Dispatcher.BeginInvoke(delegate()   
  •     {   
  •         Stream responseStream = response.GetResponseStream();   
  •         StreamReader reader = new StreamReader(responseStream);   
  •         // Récupérer la réponse du serveur
  •         string result = reader.ReadToEnd();   
  •     });   
  • }  
  •