Consumir Web Service de Forma Assíncrona

Algumas vezes nos deparamos com web services que devem ser consumidos de forma assíncrona. Quando consumimos através de uma aplicação ASP.Net, o nosso trabalho é facilitado pelo chamado Event Driven Assynchronous Web Service. De fato, basta adicionar em event handler e aguardar o método ser executado.

Entretanto, em aplicações console, workflows ou serviços do Windows, a forma de consultar o web service assíncrono difere um pouco da mencionada no exemplo do MSDN. Eu criei uma classe helper e herdei a referência web apenas para facilitar a leitura. Vamos lá:

1) Clique com o botão direito em Service References > Add Service Reference. Quando abrir a janela Add Service Reference, clique no botão Advanced. Depois é só clicar em Add Web Reference.

2) Em Url, digite a Url onde se encontra o serviço, clique no botão para encontrar os métodos disponíveis e clique em Add Reference. Neste momento você verá o serviço adicionado na pasta Web References.

3) Crie uma classe chamada WebServiceHelper e digite o seguinte conteúdo:

public class WebServiceHelper : NorthwindWS{
    public object InvocarMetodo(string nomeMetodo, object[] argumentos)    {
        // Representa o status da operação assíncrona.
        IAsyncResult ar =
            // Inicia a chamada ao método especificado de forma assíncrona.
            this.BeginInvoke(nomeMetodo, argumentos, null, null);

            // Aguarda a execução do método até que o mesmo chegue ao final.
            ar.AsyncWaitHandle.WaitOne();

            // Finaliza a chamada ao método especificado e 
                     // retorna um conjunto de resultados.
            object[] resultado = this.EndInvoke(ar);

            // O resultado sempre será único. Quando for 
                     // diferente disto é por que algo está errado.
            // Por isto só damos sequência a função se vier 
                     // apenas um resultado.
            // Caso contrário, iremos retornar vazio.
            if (resultado.Count() == 1)
                return resultado[0];
            else
                return null;
    }
}

Pronto. Agora para utilizar o web service você faz assim:

WebServiceHelper() ws = new WebServiceHelper();
string ola = ws.InvocarMetodo(
    "SayHello",
    new object[] {
        “Evandro”,
        “Venancio”});

Console.Writeline(ola);

Por enquanto é isto!

Etiquetado ,

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: