Académique Documents
Professionnel Documents
Culture Documents
Este artculo es una traduccin del artculo original encontrado en: http://create.msdn.com/enUS/education/quickstarts/Accessing_a_REST_Web_Service.
Representational State Transfer (REST) se refiere a un estilo arquitectnico para exponer recursos en la web para el acceso a los clientes. Muchos recursos, como blogs, mapas y productos, se exponen como servicios REST en la web. Silverlight proporciona clases que hacen que sea fcil llamar a los servicios REST desde una aplicacin de Windows Phone. Este tutorial presenta cmo llamar y trabajar con servicios REST. Contiene las siguientes secciones:
Llamando servicios REST Ejemplo para llamar un servicio REST Detectando la disponibilidad de la red Nota
Los ejemplos del uso de Silverlight se ejecutan en el navegador para simular su comportamiento para Windows Phone. El comportamiento real puede ser ligeramente diferente en el emulador de Windows Phone o en un dispositivo Windows Phone.
WebClient utiliza un sistema simple basado en eventos para hacer peticiones y obtener respuestas. Para utilizar WebClient, se llama al mtodo apropiado Async y se maneja el eventoCompleted correspondiente. La siguiente tabla enlista algunos de los mtodos y eventos de WebClient que debes usar, dependiendo de la accin y del tipo de datos. Accin Tipo de datos Mtodos y eventos
Mtodo DownloadStringAsync GET String Evento DownloadStringCompleted Mtodo OpenReadAsync GET Stream Evento OpenReadCompleted Mtodo UploadStringAsync POST String Evento UploadStringCompleted Mtodo OpenWriteAsync POST Stream Evento OpenWriteCompleted
envo de mensajes HTTP, PUT y DELETE. Para obtener ms informacin sobre el uso de las clases HttpWebRequest y HttpWebResponse, consulta la informacin general de la claseHttpWebRequest.
Name="textBlock5" Text="Results:" VerticalAlignment="Top" /> <ListBox Height="352" HorizontalAlignment="Left" Margin="6,271,0,0" Name="listBox1" VerticalAlignment="Top" Width="444" ItemsSource="{Binding}" > <ListBox.ItemTemplate> <DataTemplate> <Border BorderBrush="{StaticResource PhoneForegroundBrush}" Width="418" BorderThickness="2" Margin="2"> <StackPanel> <TextBlock Text="{Binding Path=Title}" TextWrapping="Wrap" /> <TextBlock Text="{Binding Path=Url}" TextWrapping="Wrap"/> </StackPanel> </Border> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid> </Grid> </phone:PhoneApplicationPage>
C#
using using using using using using using using using using using using using System; System.Collections.Generic; System.Linq; System.Net; System.Windows; System.Windows.Controls; System.Windows.Documents; System.Windows.Input; System.Windows.Media; System.Windows.Media.Animation; System.Windows.Shapes; Microsoft.Phone.Controls; System.Xml.Linq;
namespace WindowsPhoneApplication1 { public partial class MainPage : PhoneApplicationPage { // Constructor String requestString = "http://api.bing.net/xml.aspx?AppId=YourAppId&Query={0}&Sources=Web&Version=2.0&Mark et=en-us&Adult=Strict"; string UriNoAppId = "http://api.bing.net/xml.aspx?AppId=YourAppId&Query={0}&Sources=Web&Version=2.0&Mark et=en-us&Adult=Strict"; public MainPage() { InitializeComponent(); List<string> searchTopics = new List<string>() { "Microsoft", "Silverlight", "Windows Phone 7" }; comboBox1.DataContext = searchTopics; comboBox1.SelectedIndex = 0; // Crear el cliente Web y asociar un controlador al evento OpenReadCompleted. wc = new WebClient(); wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); } // Llame al servicio de tema en el sitio de bsqueda Bing. WebClient wc;
private void CallToWebService() { // Llamar a la OpenReadAsyc para hacer una peticin GET, pasando la URL con la cadena de bsqueda seleccionados. wc.OpenReadAsync(new Uri(String.Format(requestString, comboBox1.SelectedItem.ToString()))); } void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { XElement resultXml; / / Siempre se debe comprobar si ha ocurrido un error. if (e.Error != null) { return; } else { XNamespace web = "http://schemas.microsoft.com/LiveSearch/2008/04/XML/web"; try { resultXml = XElement.Load(e.Result); / / Buscar el nodo WebResult y crear un SearchResults objeto para cada uno. var searchResults = from result in resultXml.Descendants(web + "WebResult") select new SearchResult { / / Obtener la descripcin del ttulo, y los valores Url. Title = result.Element(web + "Title").Value, Description = result.Element(web + "Description").Value, Url = result.Element(web + "Url").Value }; / / Establecer los datos de contexto para el cuadro de lista a los resultados. listBox1.DataContext = searchResults; } catch (System.Xml.XmlException ex) { textBlock2.Text = ex.Message; } } } private void button1_Click(object sender, RoutedEventArgs e) { CallToWebService(); } / / Actualizar el TextBlock como cambia la seleccin de cuadro combinado. private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) { uriTextBlock.DataContext = string.Format(UriNoAppId, e.AddedItems[0]); } } // Clase simple que contenga los resultados de bsqueda. public class SearchResult { public string Title { get; set; } public string Url { get; set; } public string Description { get; set; } } }
Para asegurar una buena experiencia de usuario, debes comprobar que el telfono tiene acceso a Internet antes de llamar a un Servicio Web. Usas el mtodoNetworkInterface.GetIsNetworkAvailable para determinar si el telfono tiene conexin
a Internet. Puedes llamar este mtodo antes de llamar al Servicio Web. Si el mtodo devuelve false, ya sea que pidas al usuario que se conecte a una red viable o hazle saber que la llamada al servicio no pudo ser completada. Para un ejemplo de cmo utilizar este mtodo, consultaNetworkInterface.GetIsNetworkAvailable.
Nota La llamada al mtodo NetworkInterface.GetIsNetworkAvailable puede devolver true en el emulador, aun cuando una red no est disponible, por lo que debes probar el cdigo en un dispositivo.
Tags: mva, Silverlight, tutorial, Tutoriales, Windows Phone 7, WP7