나는 사용하여 내 WCF 서비스에서 예외 처리를 중앙 집중화 노력 오전 ErrorHandler
(System.ServiceModel.Dispatcher.IErrorHandler
)WCF 및 사용자 지정 오류?
이것은 ProvideFault 모양을하는 방법입니다
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
if (error is ValidationHandler)
{
var val = error as ValidationHandler;
var val2 = ErrorHandler.HandleException(val);
fault = Message.CreateMessage(version, val2.CreateMessageFault(), "http://ns");
}
else if (error is FaultException)
fault = Message.CreateMessage(version, (error as FaultException).CreateMessageFault(), "http://ns");
else
fault = Message.CreateMessage(version, ErrorHandler.HandleException(error).CreateMessageFault(), "http://ns");
}
ValidationHandler
은 System.Exception
하지만 datacontract
속성이없는 . ValidationHandler
에는 모든 데이터가 저장되고 datacontract
속성으로 장식 된 MainValidation
의 목록이 포함되어 있습니다.
ErrorHandler.HandleException
는 MainValidation
(datacontract
)의 목록이 포함 된 ExceptionContainer
(datacontract
)를 포함하는 사용자 정의 FaultException
인 FaultException<MyCustomFault>
에 ValidationHandler
변환합니다.
IErrorHandler
을 제거하고 ErrorHandler.HandleExceptio
n을 서비스 방법에서 직접 입력하면 모든 것이 정상적으로 작동합니다. CustomFault가 클라이언트에 도착하고 유효성 검사가 처리 될 수 있습니다.
그러나 IErrorHandler
을 사용하는 동안 클라이언트에 도착한 오류는 FaultException<MyCustomFault>
으로 캐스팅 될 수 없습니까? Message.CreateMessage
을 실행할 때 데이터가 손실 된 것 같습니다.
편집 1 : CreateMessageFault에서 생성 된 MessageFault에 세부 사항이 있음을 알 수 있습니다.이 내용을 MyCustomFault로 캐스팅하면 내용을 올바르게 읽을 수 있습니다. 문제는 고객에게 도착할 때 이것이 포함되지 않는 이유입니다.
편집 2 : 예외가 클라이언트에 도착하면 FaultException으로 캐스팅하려고 시도하지만 null을 반환합니다. 그래서 MyCustomFault는 길을 잃은 것 같습니다.
편집 3 : 저는는 config의 동작 설정 다음 한 :
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />