パラメータ フィルタ
このサンプルでは、メソッドに渡されたパラメータをメソッドの起動の前に検証する方法を示します。ParameterFilterAttribute
と ParameterFilterBehavior
を定義して、メソッドにフィルタを適用します。これによって、メソッドに渡されるパラメータに制約を加えます。
メモ : |
---|
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
サービスは、要求/応答通信パターンを定義するコントラクトを実装します。このコントラクトは 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;
}
}
次のサンプル コードに示すように、ParameterFilter
を Multiply
メソッドに適用します。
[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.
サンプルをセットアップ、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。
Copyright © 2007 by Microsoft Corporation.All rights reserved.