Share via


Filtro de parámetro

Download sample

Este ejemplo muestra cómo validar los parámetros pasados a un método antes de invocarse. ParameterFilterAttribute y ParameterFilterBehavior se definen de tal forma que el filtro se puede aplicar a los métodos para los que las restricciones se pueden imponer en los parámetros pasados al método.

Nota

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

El servicio implementa un contrato que define un modelo de comunicación de solicitud y respuesta. La interfaz ICalculator, que expone las operaciones matemáticas (Sumar, Restar, Multiplicar y Dividir), define el contrato.

 // Define a service contract.
 [ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
 public interface ICalculator
 {
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
 }

El cliente realiza solicitudes sincrónicas a una operación matemática y el servicio responde con el resultado.

En el servicio, la clase ParameterFilterBehavior implementa la interfaz IParameterInspector . El método BeforeCall de la interfaz se implementa de tal forma que se validan los parámetros antes de que se llame al método.

internal class ParameterFilterBehavior : IParameterInspector
{
    double minValue;
    double maxValue;
    public ParameterFilterBehavior(double minValue, double maxValue)
    {
        this.minValue = minValue;
        this.maxValue = maxValue;
    }
    public void AfterCall(string operationName, object[] outputs,  
                          object returnValue, object correlationState)
    {
    }
    public object BeforeCall(string operationName, object[] inputs)
    {
        // validate parameters before call
        foreach (object input in inputs)
        {
            if ((input != null) && (input.GetType() == typeof(double)))
            {
                if ((double)input < minValue || (double)input > maxValue)
                {
                    throw new FaultException("Parameter out of range: " + input.ToString());
                }
            }
        }
        return null;
    }
}

El ParameterFilter se aplica al método Multiply, tal y como se muestra en el siguiente código de ejemplo:

[ParameterFilter(MaxValue = 10, MinValue = 1)]
public double Multiply(double n1, double n2)
{
    return n1 * n2;
}

Al ejecutar el ejemplo, las solicitudes y respuestas de la operación se muestran en la ventana de la consola del cliente. En este ejemplo, se envían al servicio dos operaciones. La primera operación de multiplicar tiene los valores de entrada entre 1 y 10, por lo que la operación tiene éxito. La segunda operación de multiplicar tiene los valores de entrada fuera de ese intervalo y de este modo se devuelve un error al cliente para indicar que un parámetro estuvo fuera del intervalo.

Multiply(2,5.25) = 10.5
System.ServiceModel.FaultException: Parameter out of range: 81.25

Press <ENTER> to terminate client.

Para configurar, generar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

  2. Para generar la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.

  3. Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.