En un post anterior os presentaba Dallas, un componente de Windows Azure.
En este veremos cómo podemos consumir un servicio expuesto en Dallas desde nuestra aplicación, integrando de esta manera la información que éste ofrece.
Lo podemos consumir desde cualquier tipo de aplicación, ya que los servicios se exponen haciendo uso de estándares (REST/ATOM), pero cierto es, que si lo hacemos desde .NET nos va a resultar más sencillo.
Lo primero, lógicamente, es subscribirnos a un servicio de Dallas, como ya veíamos en el post anterior e ir a explorar el dataset desde el portal.
En la parte inferior izquierda de la página de exploración nos aparecerá información muy útil para conectarnos al servicio desde nuestra aplicación; La url del servicio, las credenciales del acceso y si queremos acceder desde .NET,el proxy que tenemos que añadir a nuestra aplicación.
Os comentaba que acceder desde .NET es lo más productivo porque la plataforma ya nos genera el proxy de acceso al servicio, el cual sólo tenemos que incluirlo en nuestro proyecto para poder tener acceso al servicio.
Si no tuviéramos el proxy podríamos acceder, pero tendríamos que construirnos las peticiones REST nosotros mismos.
Un valor necesario es disponer de esta cuenta. A través del portal podemos crear todas las cuentas que queremos.
Si nos descargamos el proxy y lo añadimos a una aplicación de consola de .NET, sólo tendremos que hacer uso del mismo..(FAO3510Service es el nombre de la clase proxy que nos hemos descargado)
string accountKey = "XXXXXX"; string uniqueUserId = "XXXXXX"; // Creamos el proxy FAO3510Service service = new FAO3510Service(accountKey, new Guid(uniqueUserId)); // Invocamos el servicio y no le pasamos ningún parámetro. // Por defecto, devuelve los 100 primeros elementos List<FAO3510Item> results = service.Invoke(null, null); // Establecemos una cabecera para el listado Console.WriteLine("{0,13}{1,24}{2,18}{3,7}{4,10}", "Series Code", "Country or Area Code", "Country or Area", "Year", "Value"); // Recorremos el resultado, de forma tipada! foreach (FAO3510Item item in results) { Console.WriteLine("{0,13}{1,24}{2,18}{3,7}{4,10}", item.SeriesCode, item.CountryOrAreaCode, item.CountryOrArea, item.Year, item.Value); } Console.ReadLine();
Si tuviésemos que hacernos la petición REST, sin el proxy, el resultado sería algo parecido a esto:
string url = "https://api.sqlazureservices.com/UnService.svc/FAO/3510?$format=atom10"; string accountKey = "XXX"; string uniqueUserId = "XXX"; WebRequest request = WebRequest.Create(url); request.Headers.Add("$accountKey", accountKey); request.Headers.Add("$uniqueUserID", uniqueUserId); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Console.WriteLine(response.StatusDescription); Console.ReadLine(); // Get the stream containing content returned by the server. Stream dataStream = response.GetResponseStream(); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader(dataStream); // Read the content. string responseFromServer = reader.ReadToEnd(); // Load the response into an XDocument XDocument data = XDocument.Parse(responseFromServer); // Specify the namespaces required to query the document XNamespace ns0 = "http://www.w3.org/2005/Atom"; XNamespace ns1 = "http://schemas.microsoft.com/ado/2007/08/dataservices"; XNamespace ns2 = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; // Specify the Linq query var result = (from q in data.Descendants(ns0 + "entry") where q.Element(ns0 + "title").Value == "Agricultural production index, 1999-2001=100 (FAO/SYB)" where q.Element(ns0 + "content").Element(ns2 + "properties").Element(ns1 + "seriesCode").Value == "3510" where q.Element(ns0 + "content").Element(ns2 + "properties").Element(ns1 + "year").Value == "2006" select q.Element(ns0 + "content").Element(ns2 + "properties").Element(ns1 + "value").Value).FirstOrDefault(); // Display the content to the Console. Console.WriteLine(result); reader.Close(); dataStream.Close(); response.Close();
En un post anterior os hablaba de Dallas y de cómo se pueden consumir servicios de Dallas desde una aplicación