パラメータ フィルタ

Download sample

このサンプルでは、メソッドに渡されたパラメータをメソッドの起動の前に検証する方法を示します。ParameterFilterAttributeParameterFilterBehavior を定義して、メソッドにフィルタを適用します。これによって、メソッドに渡されるパラメータに制約を加えます。

Noteメモ :

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

サービスは、要求/応答通信パターンを定義するコントラクトを実装します。このコントラクトは ICalculator インターフェイスによって定義されており、算術演算の操作 (Add、Subtract、Multiply、Divide) が公開されています。

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

クライアントは算術演算を同期要求し、サービスはその結果を応答として返します。

このサービスの中の ParameterFilterBehavior クラスは IParameterInspector インターフェイスを実装します。このインターフェイスの BeforeCall メソッドを実装して、パラメータがメソッド呼び出しの前に検証されるようにします。

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

次のサンプル コードに示すように、ParameterFilterMultiply メソッドに適用します。

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

このサンプルを実行すると、操作要求および応答がクライアントのコンソール ウィンドウに表示されます。このサンプルでは、2 つの操作がサービスに送信されます。最初の乗算操作の入力値は 1 ~ 10 の範囲内にあるので、この操作は正常に終了します。2 つ目の乗算操作の入力値はこの範囲にないので、クライアントにエラーが返信され、パラメータが範囲外であることが表示されます。

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

Press <ENTER> to terminate client.

サンプルをセットアップ、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

  2. ソリューションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. 単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.