Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo

Neste artigo abordaremos um dos assuntos de extrema importância no Windows Communication Foundation - WCF, o gerenciamento de instâncias. Mostraremos os tipos de instâncias existentes, e em quais situações melhor utilizá-las, e em seguida usaremos alguns conceitos, criando uma aplicação.

Para que serve

Gerenciamento de instâncias é usado pelo Windows Communication Foundation para vincular clientes a instâncias de serviços, determinando como cada uma lida com as requisições.

Em que situação o tema é útil

O uso de instâncias no Windows Communication Foundation pode ser usado em vários cenários em aplicações distribuídas, por exemplo, em aplicações de chats, transações bancárias e aplicações de comércio eletrônico.

Gerenciamento de Instâncias no WCF

O Windows Communication Foundation veio para revolucionar se tratando em aplicações distribuídas, e saber como será o vínculo dos clientes a instâncias dos serviços é de extrema importância, pois para cada cenário devemos nos atentar a cada tipo existente no WCF. Veremos neste artigo quais são esses tipos e quando usá-los. No final do artigo criaremos uma aplicação colocando em prática um tipo de instância.

Gerenciamento de instância é uma técnica usada pelo Windows Communication Foundation, que vincula o cliente (Proxy) ao serviço, determinando quais delas lidam com quais requisições. Saber qual técnica usar é muito importante porque aplicativos diferem de suas necessidades como escalabilidade, desempenho, transações e chamadas em filas. No Windows Communication Foundation existem três tipos de instâncias, são elas: PerCall, PerSession e Single. A configuração do modo como será instanciado um serviço é estritamente um detalhe de implementação que não deve transparecer para o cliente de forma alguma. O modo de como será a escolha da instância, será dado em comportamentos (behavior).

Um behavior é um atributo local de um serviço que não afeta sua comunicação, que pode ser definido opcionalmente. Os clientes não precisam saber da existência dos behaviors. O Windows Communication Foundation define três tipos de behaviors: ServiceBehavior, OperationBehavior e EndPointBehavior. No artigo é utilizado o ServiceBehavior, pois esse atributo é usado para configurar o modo de gerenciamento de instâncias. Nele existe uma propriedade InstanceContextMode, que recebe uma enumeração com o mesmo nome. O valor dessa enumeração controla qual o modelo de instância é utilizado: InstanceContextMode.PerSession, InstanceContextMode.PerCall, InstanceContextMode.Single. O ServiceBehaviorAttribute é usado para configurar comportamentos de operação, ou seja, afetam somente a implementação de uma operação em particular. É nesse atributo, que se informam configurações adicionais como sessões, transações e o modelos de instâncias.

PerCall

Quando o serviço é configurado no modo PerCall somente uma instância existe para cada método chamado, ou seja, para cada Proxy instanciado e chamado um método por ele. Uma instância do serviço é criada, não importando sé é o mesmo Proxy ou não, conforme Figura 1.

Figura 1. Modelo de instância do tipo PerCall

Assim que o método retornar com o resultado esperado a instância é liberada da memória. Descartar a instância é um item muito importante a se lembrar, e que se o serviço implementar a interface IDisposable, o Windows Communication Foundation automaticamente chamará o método Dispose(), permitindo que se execute qualquer operação de finalização que seja necessária antes de descartá-lo. No modelo de instância PerCall o Dispose é executado na mesma thread que executou a chamada ao método original.

Ter somente uma instância por chamada, realocar ou conectar seus recursos em cada chamada combina muito bem com programação transacional, uma vez que facilita a tarefa de garantir consistência com os estados da instância (para saber mais sobre transação no WCF veja a edição 82). Outro beneficio é que eles podem trabalhar em conjunto com chamadas desconectadas enfileiradas, porque facilitam o mapeamento de instâncias de serviços para mensagens enfileiradas.

Os serviços por chamada PerCall não têm como benefício o desempenho, pois ele tem a necessidade de recriar o estado das instâncias para cada chamada de método, por outro lado a vantagem em escalabilidade é muito grande.

Nota ...

Quer ler esse conteúdo completo? Tenha acesso completo