2014-01-13 3 views
1

WCF 오류 예외에 관한 질문이 있습니다. IErrorHandler 인터페이스를 구현하고 FaultException을 만듭니다.Wcf IErrorHandler 인터페이스를 사용하여 오류 처리

제 질문은 : FaultException을 만들 때 클라이언트에게 친숙한 오류 메시지를 보내기 위해 따라야하는 패턴이 있습니까?

HandleError 메서드를 사용하여 데이터베이스에 실제 예외를 기록하고 을 ProvideFault 메서드로 생성합니다.

주어진 경우, IErrorHandler 인터페이스의 샘플 구현이 있습니다.

public bool HandleError(Exception error) 
{ 
    System.Diagnostics.Debug.WriteLine(error.Message); 
      // Log the error to the Db 
    return true; 
} 

public void ProvideFault(Exception error, MessageVersion version, ref Message fault) 
{ 
     // Here is a sample that I was playing with. 
    MessageFault faultException; 
    if(error is DataException) 
     faultException = new FaultException<string>(ErrorStrings.DatabaseOpenError, new FaultReason(ErrorStrings.DatabaseOpenError)).CreateMessageFault(); 
    else if (error is NullReferenceException) 
     faultException = new FaultException<string>(ErrorStrings.NullDataError, new FaultReason(ErrorStrings.NullDataError)).CreateMessageFault(); 
    else 
     faultException = new FaultException<string>(ErrorStrings.GeneralError, new FaultReason(ErrorStrings.GeneralError)).CreateMessageFault(); 

    fault = Message.CreateMessage(version, faultException, ""); 
} 

나는 정확하게 사용자에게 친숙한 오류를 반환 할 ProvideFault 방법 내부에서 수행해야하는 것에 대한 약간의 선명도를해야합니다. 또한 오류를 표시하기 위해 지역화를 사용할 계획입니다. 이것이 클라이언트에 의해 수행 될지 또는 서비스가 지역화 된 메시지를 전송해야하는지 확실하지 않습니다.

필자가 읽은 바에 따르면 보안상의 이유로 EntityValidation 오류 등의 오류 또는 EntityFramework 오류와 같은 스택 정보를 클라이언트에 보내지 말아야합니다.

이 경우 예외 유형을 확인하고 클라이언트에게 보내기 전에 세부 정보를 더 자세히 조사해야합니까?

답변