Partager via


Parameter Filter

Cet exemple indique comment valider les paramètres transmis à une méthode avant qu'elle soit appelée. ParameterFilterAttribute et ParameterFilterBehavior sont définis de sorte que le filtre puisse être appliqué aux méthodes pour lesquelles les contraintes peuvent être imposées sur les paramètres transmis à la méthode.

ms752267.note(fr-fr,VS.90).gifRemarque :
La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent en fin de rubrique.

Le service implémente un contrat qui définit un modèle de communication demande-réponse. Le contrat est défini par l'interface ICalculator qui expose les opérations mathématiques suivantes : addition, soustraction, multiplication et division.

 // 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);
 }

Le client adresse des demandes synchrones à une opération mathématique et le service répond avec le résultat.

Dans le service, la classe ParameterFilterBehavior implémente l'interface IParameterInspector. La méthode BeforeCall de l'interface est implémentée de sorte que les paramètres soient validés avant que la méthode soit appelée.

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;
    }
}

ParameterFilter est appliqué sur la méthode Multiply, comme illustré dans l'exemple de code suivant :

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

Lorsque vous exécutez l'exemple, les demandes et réponses d'opération s'affichent dans la fenêtre de console cliente. Dans cet exemple, deux opérations sont soumises au service. La première opération de multiplication a des valeurs d'entrée comprises entre 1 et 10, donc l'opération réussit. La deuxième opération de multiplication a des valeurs d'entrée en dehors de cette plage, donc une erreur est renvoyée au client pour indiquer qu'un paramètre était hors limites.

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

Press <ENTER> to terminate client.

Pour configurer, générer et exécuter l'exemple

  1. Assurez-vous d'avoir effectué la procédure figurant dans la section Procédure d'installation unique pour les exemples Windows Communication Foundation.

  2. Pour générer la solution, suivez les instructions indiquées dans la rubrique Génération des exemples Windows Communication Foundation.

  3. Pour exécuter l'exemple dans une configuration à un ou plusieurs ordinateurs, suivez les instructions indiquées dans la rubrique Exécution des exemples Windows Communication Foundation.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.