Showing posts with label Web Services. Show all posts
Showing posts with label Web Services. Show all posts

Wednesday, November 19, 2008

Chamando um web services que não tem retorno

Esses dias me deparei com um problema em um dos web services que estava criando aqui: eu deveria chamar o web service mas nao precisava esperar o seu retorno pois o web service era uma sub (ou void). Imagine o seguinte cenário: toda noite minha aplicação precisa chamar um web service que processa alguns dados e atualiza o banco de dados com algumas estatisticas. Agora imagine que voce precisa disparar dois processos desses em paralelo, dispara um web service e em seguida dispara o outro sem precisar esperar a conclusao do primeiro. Mesmo sendo um metodo sub (ou com retorno void) o processo que chamou o web service precisará aguardar a mensagem de retorno (http 200) que só chegará quando o web service terminar a execuçao para dai chamar o segundo.

Para resolver esse problema podemos adicionar um atributo ao web service informando que aquele método nao irá retornar nada, entao o segundo web service será chamado logo em seguida (em outras palavras, o processamento continua, nao fica esperando o retorno do web service). Essa chamada é conhecida como OneWayCall. Veja como fica a declaração do web method:

using System.Web.Services;
using System.Web.Services.Protocols;

public class Stats: WebService
{
[SoapDocumentMethod(OneWay=true)]
[WebMethod()]
public void GeraRelatorio1() {
// Codifique aqui
}
}

A chamada para um web services One Way Call é a mesma para um web service normal.

Esse truque funciona como uma chamdaa assincrona "fake", mas pode ajudar em diversos cenários. Voce pode ter o mesmo efeito fazendo chamadas assincronas "reais" mas vai dar um pouco mais de trabalho.

Outro caso que a chamada oneWayCall me ajudou foi quando precisei disparar um processamento no banco de dados e logo em seguida enviar uma mensagem ao usuário informando que o processamento estava sendo feito e liberar a aplicação para que o usuario pudesse continuar fazendo outras coisas.

Para se aprofundar :http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapdocumentmethodattribute.oneway.aspx

Have Fun!