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!
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment