문제

처음으로 WCF 서비스를 작성 중입니다.서비스와 모든 클라이언트(적어도 현재로서는)는 C#으로 작성되었습니다.서비스는 전달된 데이터에 대해 많은 입력 유효성 검사를 수행해야 하므로 잘못된 데이터를 클라이언트에 다시 표시할 수 있는 방법이 필요합니다.나는 결함과 예외, 예외를 결함으로 감싸는 것, 나를 더욱 혼란스럽게 만드는 상충되는 많은 기사에 대해 많이 읽었습니다.이 사건을 처리하는 올바른 방법은 무엇입니까?

예외를 모두 피하고 결과 반환 메시지를 패키지해야 합니까?특수한 오류 또는 특수한 예외를 생성해야 합니까, 아니면 WCF가 아닌 유효성 검사 함수에 대해 하는 것처럼 ArgumentException을 발생시켜야 합니까?

내가 지금 가지고 있는 코드는 MSDN) 이다:

[DataContract]
public class ValidationFault
{
    [DataMember]
    public Dictionary<string, string> Errors { get; private set; }

    [DataMember]
    public bool Fatal { get; private set; }

    [DataMember]
    public Guid SeriesIdentifier { get; private set; }

    public ValidationFault(Guid id, string argument, string error, bool fatal)
    {
        SeriesIdentifier = id;
        Errors = new Dictionary<string, string> {{argument, error}};
        Fatal = fatal;
    }

    public void AddError(string argument, string error, bool fatal)
    {
        Errors.Add(argument, error);
        Fatal |= fatal;
    }
}

그리고 메서드에는 [FaultContract(typeof(ValidationFault))]가 있습니다.그렇다면 이것이 접근하는 "올바른" 방법입니까?

도움이 되었습니까?

해결책

클라이언트에서 유효성 검사를 수행하고 메서드(웹 서비스 호출)에 전달된 후 유효한 값을 가져야 하는 경우 예외가 발생합니다.매개변수 이름으로 매개변수가 유효하지 않음을 나타내는 예외일 수 있습니다.(보다:인수예외)

그러나 데이터의 유효성을 올바르게 검증하기 위해 클라이언트에 의존하고 싶지 않을 수 있으며 이로 인해 웹 서비스에 들어오는 데이터가 유효하지 않을 수 있다는 가정이 남게 됩니다.그러한 경우에는 실제로 예외적인 경우가 아니며 예외가 되어서도 안 됩니다.이 경우 열거형(OK, Invalid, Incomplete)으로 설정된 Status 속성과 매개 변수 이름과 같은 세부 사항이 포함된 Message 속성이 있는 열거형 또는 Result 객체를 반환할 수 있습니다.

개발 중에 이러한 종류의 오류를 찾아 수정하도록 하겠습니다.QA 프로세스에서는 클라이언트의 유효한 사용과 유효하지 않은 사용을 주의 깊게 테스트해야 하며 이러한 기술 메시지를 클라이언트에 다시 전달하고 싶지는 않습니다.대신에 원하는 것은 유효하지 않은 데이터가 서비스 호출에 전달되지 않도록 유효성 검사 시스템을 업데이트하는 것입니다.

모든 WCF 서비스에 대한 나의 가정은 둘 이상의 UI가 있을 것이라는 것입니다.지금은 하나가 웹 UI일 수 있지만 나중에 WinForms, WinCE 또는 .NET 클라이언트에서 기대하는 것과 일치하지 않는 기본 iPhone/Android 모바일 애플리케이션을 사용하여 다른 하나를 추가할 수도 있습니다.

다른 팁

WCF 서비스에서는 예외를 발생시키는 것이 유용하지 않습니다. 왜 안 될까요?왜냐하면 그것은 순수한 잘못으로 되돌아오고 당신은

a) 예외를 포함하도록 오류를 설정합니다.

b) 오류를 분석하여 예외 텍스트를 얻고 무슨 일이 일어났는지 확인합니다.

그렇습니다. 예외보다는 결함이 필요합니다.귀하의 경우에는 오류 계약의 일부로 유효성 검사에 실패한 필드 목록이 포함된 사용자 정의 오류를 생성하겠습니다.

WCF는 ISerialize할 수 없는 사전을 사용하여 재미있는 작업을 수행합니다.특별한 처리 기능이 있으므로 회선을 통해 돌아오는 메시지가 제대로 보이는지 확인하세요.그렇지 않다면 배열로 돌아갑니다.

정책 주입 블록과 함께 MS Patterns and Practices Enterprise Library Validation 블록을 살펴보는 것이 좋습니다. 링크 텍스트 이를 통해 유효성 검사 특성으로 데이터 계약 멤버를 장식하고 서비스 구현도 장식할 수 있습니다. 이는 WCF와의 통합과 함께 유효성 검사 실패가 각 유효성 검사 실패에 대한 ValidationDetail 개체를 포함하는 ArgumentValidationException 오류로 자동으로 반환됨을 의미합니다.

WCf와 함께 entlib를 사용하면 많은 코드를 작성하지 않고도 많은 유효성 검사, 오류 보고를 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top