Freigeben über


Parameterfilter

In diesem Beispiel wird veranschaulicht, wie die Parameter überprüft werden, die an eine Methode übergeben werden, bevor diese aufgerufen wird. Das ParameterFilterAttribute und das ParameterFilterBehavior werden so definiert, dass die Filter auf Methoden angewendet werden können, für die auf den Parametern, die an die Methode übergeben werden, Einschränkungen festgelegt werden können.

Tipp

Die Setupprozedur und die Erstellungsanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Der Dienst implementiert einen Vertrag, der ein Anforderungs-Antwort-Kommunikationsmuster definiert. Der Vertrag wird von der ICalculator-Schnittstelle definiert, die mathematische Operationen (Addieren, Subtrahieren, Multiplizieren und Dividieren) verfügbar macht.

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

Der Client stellt synchrone Anforderungen an einen mathematischen Vorgang, und der Dienst antwortet mit dem Ergebnis.

In dem Dienst implementiert die ParameterFilterBehavior-Klasse die IParameterInspector-Schnittstelle. Die BeforeCall-Methode der Schnittstelle wird so implementiert, dass die Parameter vor dem Aufruf der Methode überprüft werden.

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

Der ParameterFilter wird auf der Multiply-Methode angewendet, wie im folgenden Beispielcode gezeigt.

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

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. In diesem Beispiel werden zwei Vorgänge an den Dienst übermittelt. Die erste Multiplikationsoperation besitzt Eingabewerte zwischen 1 und 10, der Vorgang ist daher erfolgreich. Die zweite Multiplikationsoperation besitzt Eingabewerte außerhalb dieses Bereichs, und daher wird ein Fehler an den Client zurückgesendet, der angibt, dass sich ein Parameter außerhalb des Bereichs befand.

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

Press <ENTER> to terminate client.

So richten Sie das Beispiel ein, erstellen es und führen es aus

  1. Vergewissern Sie sich, dass Sie Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.

  2. Folgen Sie zum Erstellen der Projektmappe den unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.

  3. Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den unter Durchführen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.

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