phone7

Windows Phone 7 – hacer web requests de forma simple

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 sirva 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s