Olá pessoal, vamos ver mais um artigo sobre WCF, neste iremos falar sobre instâncias.

As instâncias em WCF representa a  forma de como será inicializado um serviço.

Existem três tipos de instâncias no WCF

PerSession (default)

Cria uma instância do serviço para cada cliente, essa instância é ativada quando o cliente faz a primeira requisição ficando ativa para as demais requisições até que é chamado o método Close do meu Proxy ou o Dispose se estiver dentro do using, por ele ficar ativo, da primeira chamada até o método close, ele é conhecido como Session.

Cada instância do meu serviço representa um instância  do Proxy do meu cliente, isso quer dizer que, se o meu cliente instância  varias vezes o mesmo Proxy, mesmo apontando para o mesmo serviço, será criada uma nova sessão ao lado do meu serviço e essa sessão não será compartilhada, mesmo vindo do mesmo cliente.

Exemplo de uma instância Perssion

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]

public class Service1 : IService1{ }

 

Para que a sessão funcione sem problemas, precisamos analisar qual binding utilizar, pois o WCF precisa saber qual cliente pertence a qual instância , quando trabalhamos com binding que utiliza esse suporte nativamente como no caso do protocolo TCP, isso funciona perfeitamente, mas quando trabalhamos como o protocolo HTTP, isso não é tão simples assim, pois a cada chamada é feita uma nova conexão com o meu serviço, por isso o binding BasicHttpBinding não suporta sessões, já o binding WSHttpBinding é capaz de emular a sessão incluindo o SessionID nos headers da mensagem que identifica o cliente, é bem semelhante do que o asp.net faz.

O tempo defualt da session é de 10 minutos

 Percall

Enquanto o PerSession, mantém o estado ativo do lado do serviço, prendendo a sessão do lado do cliente,  chamando muitas vezes métodos do lado do serviço que são utilizadas poucas vezes e com isso consumindo memórias desnecessárias.

O Percall funciona de forma contrario, para cada chamada do método no serviço, é criada uma nova instância, quando o método que foi chamado voltar com a resposta  o objeto será removido da memória.

Devemos observar estado de sessão, esse modelo não existe sessão, logo se quisermos guardar alguma informação, precisamos utilizar outro meio como um banco de dados por exemplo.

Exemplo de uma instância PerCall

[ServiceBehavior(InstanceContextMode= InstanceContextMode.PerCall)]

public class Service1 : IService1{}

 

Single

Neste modelo, existe somente uma instância não importando de qual proxy vem a requisição, enquanto meu host tiver ativo o objeto vivera.

Vários clientes acessam o mesmo serviço, e com isso devemos ter o cuidado pois termos vários acessos ao mesmo objeto e se não controlarmos isso de forma ideal podemos ter um resultado não esperado.

Exemplo de uma instância Single

[ServiceBehavior(InstanceContextMode= InstanceContextMode.Single)]

public class Service1 : IService1{}

Espero que tenham gostado e até a proxima.

http://www.nandosilva.com