Compartir vía


Sesión

En el ejemplo de sesión se muestra cómo implementar un contrato que requiere una sesión. Una sesión proporciona contexto para realizar varias operaciones. Esto permite que un servicio asocie el estado a una sesión determinada, de modo que las operaciones posteriores puedan usar el estado de una operación anterior. Este ejemplo se basa en la Guía de inicio, que implementa un servicio de calculadora. El contrato ICalculator se ha modificado para permitir que se realice un conjunto de operaciones aritméticas, mientras se mantiene un resultado en ejecución. Esta funcionalidad se define mediante el ICalculatorSession contrato. El servicio mantiene el estado de un cliente mientras se realizan varias operaciones de servicio para realizar un cálculo. El cliente puede recuperar el resultado actual llamando a Result() y restableciendo el resultado a cero llamando a Clear().

En este ejemplo, el cliente es una aplicación de consola (.exe) y los Servicios de Internet Information Server (IIS) hospedan el servicio.

Nota:

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

Establecer SessionMode del contrato en Required garantiza que cuando el contrato se expone en un enlace en concreto, el enlace admita las sesiones. Si el enlace no admite sesiones, se producirá una excepción. La ICalculatorSession interfaz se define de modo que se pueda llamar a una o varias operaciones, que modifica un resultado en ejecución, como se muestra en el código de ejemplo siguiente.

[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();
}

El servicio utiliza InstanceContextMode de PerSession para enlazar un contexto de instancia de servicio determinado para cada sesión de entrada. Esto permite al servicio mantener el resultado en ejecución para cada sesión en una variable miembro 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; }
}

Al ejecutar el ejemplo, el cliente realiza varias solicitudes al servidor y solicita el resultado, que a continuación se muestra en la ventana de la consola del cliente. Presione ENTRAR en la ventana del cliente para apagar el cliente.

(((0 + 100) - 50) * 17.65) / 2 = 441.25
Press <ENTER> to terminate client.

Para configurar, compilar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.

  3. Para ejecutar el ejemplo en una configuración de una máquina única o entre máquinas, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation.