Consumiendo un servicio de Dallas (I)

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.

image

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.

image 

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();

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

Una respuesta a “Consumiendo un servicio de Dallas (I)”

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *