Duplex Services no ASP.NET


O WCF fornece uma funcionalidade chamada Duplex Services. Este tipo de serviço permite que o servidor invoque um método do lado do cliente através de callbacks.

Quando estamos trabalhando com Windows Forms, o consumo deste tipo de serviço não tem muito segredo, pois voce pode apontar para um método dentro do teu formulário ou até mesmo em uma classe do teu projeto que, quando chegar o momento, o runtime do WCF o invocará. No ASP.NET as coisas funcionam de forma diferente. Uma vez que voce requisita uma página ASPX, o ASP.NET cria o objeto correspondente a mesma, executa e, por fim, o descarta. Com isso, se apontarmos o callback de um serviço duplex para um método qualquer da página, muito provavelmente, quando chegar o momento do serviço executá-lo, ele já não existirá mais.

Para resolver, ou melhor, aguardar até que o callback seja disparado, voce pode utilizar um sincronizador, como o é o caso do ManualResetEvent que irá aguardar até que o callback seja disparado. O exemplo desta utilização é mostrado através do trecho de código abaixo:

public partial class _Default : Page, IServiceCallback
{
    private ManualResetEvent _mre = new ManualResetEvent(false);

    protected void Page_Load(object sender, EventArgs e)
    {
        using (ServiceClient proxy =
            new ServiceClient(new InstanceContext(this)))
        {
            proxy.Send(“Israel”);
            _mre.WaitOne();
        }
    }

    public void Notification(string message)
    {
        Response.Write(message);
        _mre.Set();
    }
}

Como podemos notar, o método WaitOne aguardará até que o método Set seja disparado que, por sua vez, está sendo invocado dentro do método de callback.

Anúncios

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