다음을 통해 공유


Parameter Filter

이 샘플에서는 메서드를 호출하기 전에 해당 메서드에 전달된 매개 변수의 유효성을 검사하는 방법을 보여 줍니다. 메서드에 전달된 매개 변수에 제약 조건을 적용할 수 있는 메서드에 필터를 적용할 수 있도록 ParameterFilterAttributeParameterFilterBehavior를 정의합니다.

참고

이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.

이 서비스는 요청-회신 통신 패턴을 정의하는 계약을 구현합니다. 이 계약은 수학 연산(더하기, 빼기, 곱하기 및 나누기)을 노출하는 ICalculator 인터페이스에 의해 정의됩니다.

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

샘플을 실행하면 작업 요청 및 응답이 클라이언트 콘솔 창에 표시됩니다. 이 샘플에서는 두 개의 연산이 서비스에 제출됩니다. 첫 번째 곱하기 연산의 입력 값은 1에서 10 사이에 있으므로 연산이 성공합니다. 두 번째 곱하기 연산의 입력 값은 해당 범위를 벗어나므로 매개 변수가 범위를 벗어났음을 나타내는 오류가 클라이언트로 다시 전송됩니다.

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

Press <ENTER> to terminate client.

샘플을 설치, 빌드 및 실행하려면

  1. Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.

  2. 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.

  3. 단일 컴퓨터 또는 다중 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.

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