Compartir a través de


Consumir un servicio de Dallas   

Consumir un servicio de Dallas desde una aplicación resulta un proceso sumamente sencillo. A continuación se mostrará el proceso a seguir para poder integrar la información que el servicio proporciona desde una aplicación.

La información puede ser consumida casi desde cualquier tipo de aplicación y tecnología, ya que los servicios se exponen haciendo uso de estándares (REST/ATOM).

Una vez subscritos a un servicio de Dallas, será necesario ir a las opciones de exploración del servicio (también conocido como DataSet).

En la parte inferior izquierda de la página de exploración aparecerá la información necesaria para realizar una conexión al servicio desde aplicación; La URI del servicio, las credenciales del acceso y si se desea acceder desde una aplicación .NET, el proxy que debe incluirse dentro de la aplicación.


Figura 1.- Descarga de las clases proxy

La opción más productiva es realizar una aplicación con tecnología .NET debido a que la plataforma ya genera el proxy de acceso al servicio, el cual sólo hay que incluirlo en el proyecto para poder tener acceso al servicio.

Otro aspecto a tener en cuenta son las credenciales de acceso. Desde el portal de Dallas se podrán generar múltiples cuentas de acceso.


Figura 2.- Credenciales de acceso

En el siguiente trozo de código se muestra una aplicación cliente que hace uso del proxy ofrecido por el portal.

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

En este otro código, se muestra una aplicación cliente que hace uso directamente del API REST que el servicio expone, sin emplear las clases proxy.

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 = "https://schemas.microsoft.com/ado/2007/08/dataservices";
XNamespace ns2="https://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();