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 오류와 같은 스택 정보를 클라이언트에 보내지 말아야합니다.
이 경우 예외 유형을 확인하고 클라이언트에게 보내기 전에 세부 정보를 더 자세히 조사해야합니까?