Windows Phone 7 – hacer web requests de forma simple

by MdzNet 28. May 2010 10:31

La célula de Mendoza esta intento buscar gente para hacer desarrollos en Windows Phone 7 y por mi cuenta (Angel) he estado haciendo algunas investigaciones.

Por naturaleza de aplicación para celular, lo mas conveniente es hacer aplicaciones que consuman datos de algún web service. A veces es difícil encontrar como hacer esto, mas cuando la plataforma es tan nueva. Acá les voy a pasar un ejemplo de como hacerlo correctamente y de forma fácil:

        public void GetXML(string url)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(url));
            request.Headers["user-agent"] = "MSIE 7.0";
            request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
        }

        private void ReadCallback(IAsyncResult asynchronousResult)
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);

            using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
            {
                XDocument xmlDocument = XDocument.Load(streamReader);                
            }        
}
 

El código hace un pedido a una url especificada y cuando obtiene la respuesta va al metodo ReadCallback (si van a actualizar algún control tengan en cuenta que están trabajando en hilos diferentes). Yo en el ejemplo cree un XDocument (es la version de XmlDocument en WP7), pero pueden usar un string o lo que deseen.

Como les decia, si van a actualizar un metodo, lo mejor es usar un delegado y un evento (estos son ejemplos, no le presten atencion a los metodos y argumentos)

1) Declaramos en nuestra clase ambos:

public delegate void CharacterReceivedHandler(object sender, CharacterReceivedEventArgs e);
public event CharacterReceivedHandler CharacterReceived;

2) Disparamos el evento cuando armamos el XDocument ( o lo que recibamos):

 
if(CharacterReceived != null)
      CharacterReceived(this, new CharacterReceivedEventArgs() { Character = currentCharacter });
 
3)En la clase que enganchamos el metodo hacemos lo siguiente:
 
connector.CharacterReceived += new ArmoryConnector.CharacterReceivedHandler(connector_CharacterReceived);

void connector_CharacterReceived(object sender, CharacterReceivedEventArgs e)
{
    this.Dispatcher.BeginInvoke(delegate()
    {
        // Update controls here 
    });
}

Ojala les sirve :)

Tags: , , , ,

Windows Phone 7


Concurso CodeCamp

Conocé mas acerca del mayor evento de la
Comunidad Microsoft en Argentina.

WWW.CODECAMP.COM.AR

------------------------------------------------

Para los que están Participando:

-Que es una célula?

-Como puedo promocionar mi proyecto?

-Dreamspark

Administradores:

Armando Meabe.
Guillermo Bellmann.
Miguel Saez.
Nicolás Vilela.
Ivana Tilca.

Esperamos que disfrutes de este sitio, lo hicimos dando nuestro mayor esfuerzo.

Nunca te olvides:
El límite es tu imaginación.

Especialistas Microsoft

Daniel Levi (IT Pro´s)

Daniel Priego (Expression Studio)

Debora Di Piano (Team Fundation Server)

 


Channel 9 - Visual Studio 2010 and .NET Framework 4 Training Course

Includes videos and hands-on-labs designed to help you learn how to utilize the Visual Studio 2010 features and a variety of framework technologies including: C# 4.0, Visual Basic 10, F#, Parallel Computing Platform, WCF, WF, WPF, ASP.NET AJAX 4.0, ASP.NET MVC Dynamic Data
Watch it online now ›

The Code Project – Tech Summit

Join us at The Code Project Tech Summit to experience the Microsoft Visual Studio 2010 launch alongside the Visual Studio team. At this virtual event you can explore, network, and learn from the experts on the latest and greatest version of Microsoft Visual Studio.
Watch it online now ›