2008-09-18 6 views
6

저는 처음으로 WCF 서비스를 작성하고 있습니다. 서비스와 모든 클라이언트 (적어도 현재는)는 C#으로 작성되었습니다. 이 서비스는 전달 된 데이터에 대해 많은 입력 검증을해야하므로 유효하지 않은 데이터를 다시 클라이언트에 표시 할 방법이 필요합니다. 나는 결함과 예외에 대한 많은 것을 읽었으며, 예외적으로 예외를 래핑하고, 많은 혼란스러운 기사들이 나를 혼란에 빠뜨리고있다. 이 사건을 처리하는 적절한 방법은 무엇입니까?WCF 오류 및 예외

예외를 피하고 결과를 반환해야합니까? 특수 Wault 또는 특수 Exception을 작성해야합니까? 아니면 WCF가 아닌 유효성 검사 함수처럼 ArgumentExceptions를 throw해야합니까?

[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를))]있다 :

내가 지금 (MSDN에 영향을) 한 코드이다. 이것이 이것을 접근하는 "올바른"방법입니까?

답변

3

클라이언트에서 유효성 검사를 수행하고 유효한 값이 있어야 메서드 (웹 서비스 호출)에 전달되면 예외가 발생합니다. 매개 변수 이름과 함께 매개 변수가 유효하지 않음을 나타내는 예외 일 수 있습니다. (ArgumentException 참조)

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

개발 중에 이러한 종류의 오류가 발견되고 수정되었는지 확인합니다. 품질 관리 프로세스는 클라이언트의 유효 및 유효하지 않은 사용을 신중하게 테스트해야하며 이러한 기술 메시지를 다시 클라이언트에 전달하고 싶지는 않습니다. 대신 무효 데이터가 서비스 요청에 들어 가지 않도록 유효성 검사 시스템을 업데이트하십시오.

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

2

정책 삽입 블록 link text과 함께 MS 패턴 및 프랙티스 엔터프라이즈 라이브러리 유효성 검사 블록을 살펴 보는 것이 좋습니다. 그러면 유효성 검사 속성을 사용하여 데이터 계약 멤버를 장식하고 서비스 구현을 함께 꾸밀 수 있습니다 WCF와의 통합을 통해 유효성 검사 실패는 각 ValidationDetail 객체를 포함하는 ArgumentValidationException 오류로 자동 반환됩니다. 왜

많은 코드가 예외를 던지는

+0

관심있는 사람은 EntLib 유효성 검사 블록에 대한 초보자 안내서의 [link] (http://msdn.microsoft.com/en-us/library/ff953182(v=pandp.50) .aspx) . – Crackerjack

4

를 작성하지 않고도 검증, 오류보고를 많이 얻을 수 WCF와 entlib 사용은 WCF 서비스에서 유용하지 않다? 그것은 다시 베어 장애로 오는 당신은) 예외

B

을 포함 예외의 텍스트를 얻고 무슨 일이 있었는지 확인하기 위해 오류를 구문 분석하는

A) 설정 오류해야하기 때문에.

그렇습니다. 예외가 아닌 오류가 필요합니다.나는, 당신의 경우, 오류 계약의 일부로 검증에 실패한 필드의 목록을 포함하는 사용자 정의 오류를 생성합니다.

WCF는 ISerializable이 아닌 사전을 사용하여 재미있는 일을합니다. 특별한 핸들링을 가지고 있으므로, 메시지가 유선상에서 잘 보이는지 확인하십시오. 그렇지 않으면 배열로 돌아갑니다.