Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O exemplo de sessão demonstra como implementar um contrato que requer uma sessão. Uma sessão fornece contexto para executar várias operações. Isso permite que um serviço associe o estado a uma determinada sessão, de modo que as operações subsequentes possam usar o estado de uma operação anterior. Este exemplo é baseado em Introdução, que implementa um serviço de calculadora. O ICalculator contrato foi modificado para permitir a realização de um conjunto de operações aritméticas, mantendo um resultado contínuo. Esta funcionalidade é definida pelo ICalculatorSession contrato. O serviço mantém o estado de um cliente enquanto várias operações de serviço são chamadas para executar um cálculo. O cliente pode recuperar o resultado atual chamando Result() e limpar o resultado para zero chamando Clear().
Neste exemplo, o cliente é um aplicativo de console (.exe) e o serviço é hospedado pelo IIS (Serviços de Informações da Internet).
Observação
O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.
Definir o SessionMode do contrato como Required garante que, quando o contrato é exposto sobre uma ligação específica, a ligação suporta sessões. Se a associação não suportar sessões, uma exceção será lançada. A ICalculatorSession interface é definida de forma que uma ou mais operações possam ser chamadas, o que modifica um resultado em execução, conforme mostrado no código de exemplo a seguir.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
[OperationContract(IsOneWay=true)]
void Clear();
[OperationContract(IsOneWay = true)]
void AddTo(double n);
[OperationContract(IsOneWay = true)]
void SubtractFrom(double n);
[OperationContract(IsOneWay = true)]
void MultiplyBy(double n);
[OperationContract(IsOneWay = true)]
void DivideBy(double n);
[OperationContract]
double Result();
}
O serviço usa um InstanceContextMode de PerSession para vincular o contexto de instância de um determinado serviço a cada sessão de entrada. Isso permite que o serviço mantenha o resultado de execução para cada sessão em uma variável de membro local.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class CalculatorService : ICalculatorSession
{
double result = 0.0D;
public void Clear()
{ result = 0.0D; }
public void AddTo(double n)
{ result += n; }
public void SubtractFrom(double n)
{ result -= n; }
public void MultiplyBy(double n)
{ result *= n; }
public void DivideBy(double n)
{ result /= n; }
public double Result()
{ return result; }
}
Quando você executa o exemplo, o cliente faz várias solicitações ao servidor e solicita o resultado, que ele exibe na janela do console do cliente. Pressione ENTER na janela do cliente para desligar o cliente.
(((0 + 100) - 50) * 17.65) / 2 = 441.25
Press <ENTER> to terminate client.
Para configurar, compilar e executar o exemplo
Verifique se você executou o procedimento de instalação do One-Time para os exemplos do Windows Communication Foundation.
Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.