Neste artigo vamos aprender como consumir um serviço web com uma aplicação desktop criada em C#.
Um serviço web (web service) é uma API disponível através da Web que pode ser utilizada desde que se respeite as condições de uso. Em alguns casos os web services são gratuítos e não requerem nenhum registo ou credênciais, no entanto, existem outros serviços que depende de um registo e até de um pagamento.
Para demonstrar o conceito vamos utilizar um serviço oferecido pelo Banco Central Europeu disponível no seguinte link http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml.
Este serviço devolve as cotações diárias de moedas em função do valor do euro. Os dados são codificados em formato XML.
O pedido dos dados não pode acontecer na thread principal do programa uma vez que isso provocaria a paragem da interface. Assim é necessário recorrer a um pedido assincrono numa thread separada da thread responsável pela atualização a interface gráfica (GUI).
O código que vai permitir consumir os dados é o seguinte:
async void downloadXML()
{
string url = "http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml";
WebRequest pedido = WebRequest.Create(url);
WebResponse resposta = await pedido.GetResponseAsync();
XDocument documento = XDocument.Load(resposta.GetResponseStream());
textBox1.Text = documento.ToString();
//preencher a listview
XmlDocument xml = new XmlDocument();
xml.LoadXml(documento.ToString());
XmlNodeList lista = xml.GetElementsByTagName("Cube");
foreach (XmlNode no in lista)
{
if (no.Attributes.Count > 1)
{
ListViewItem novo = new ListViewItem(no.Attributes[0].InnerXml);
novo.SubItems.Add(no.Attributes[1].InnerXml);
listView1.Items.Add(novo);
}
}
}
Trata-se de uma função assincrona que é chamada a partir de um clique num botão.
Como se pode verificar na linha de definição da função é utilizada a palavra reservada async.
Esta foi introduzida no Visual Studio 2012 e permite simplificar o trabalho de criar uma função assincrona deixando a parte mais dificil para o compilador (Ler mais sobre o assunto).
A execução corre normalmente até encontrar a linha com o termo await onde o controlo da execução é devolvido para a linha que chamou a função assincrona, não bloqueando a interface, enquanto espera que o processamento dessa linha termine para continuar até ao final da função.
O resto da função permite manipular os dados recebidos em formato XML.
Projeto
Sem comentários:
Enviar um comentário