Mensagens One-Way não são assíncronas


Uma das possibilidades que temos ao construir um serviço WCF, é a capacidade de enviar mensagens conhecidas como one-way. Quando você tem operações que não retornam valores e, principalmente, o cliente não está interessado no sucesso ou falha da mesma, podemos recorrer à esta técnica. Ela permite que o proxy envie a mensagem ao seu destino, sem esperar pela sua execução. Há um bloqueio mínimo do lado do cliente, que é apenas necessário para que o proxy mande a mensagem e o serviço a enfileire. A partir daí, o cliente está livre para dar continuidade na execução do programa.

Dependendo do problema que ocorra, o retorno pode ser imediato, como acontece quando o respectivo endpoint não é encontrado, e dificilmente você notará esse bloqueio. Já em outros casos, quando a quantidade de informação enviada ao serviço é muito grande, isso também pode demorar a retornar, o que pode gerar uma má experiência (bloqueio) ao usuário. Outro problema que é muito comum, é quando você define o modelo de sincronização como Single e utiliza um binding que dá suporte à sessões, obrigando ao serviço (dispatcher) assegurar a entrega das mensagens de forma ordenada, impossibilitando que outra mensagem seja lida até que o processamento da mensagem atual seja completada.

Uma forma de contornar esse tipo de problema é trabalhar com mensagens assíncronas, como é mostrado aqui. Isso evitará a necessidade do cliente ficar aguardando até que a mensagem one-way seja efetivamente entregue ao serviço, mas como um ponto negativo, que é a saturação do ThreadPool, dependendo do volume de requisições que são realizadas. Outra alternativa é definir o gerenciamento de instância do serviço como PerCall e com modo de sincronização Multiple, onde cada requisição será atendida por uma instância diferente e podendo mais que uma thread enviar as mensagens.

Publicidade

Deixe uma resposta

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

Logo 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 )

Conectando a %s