Да, вы можете реализовать IErrorHandler
и использовать его для сопоставления исключений.Вам не нужно выбрасывать WebFaultException
из вашей бизнес-логики, просто выбросьте свои пользовательские исключения.
Например, вы можете сопоставить YourCustomException
с какой-то простой строкой json.Вместо строки вы можете поставить какой-то объект.Пример реализации IErrorHandler.ProvideFault
:
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
if (error is YourCustomException)
{
fault = Message.CreateMessage(version, string.Empty, String.Format("Error: {0}.", error.Message), new DataContractJsonSerializer(typeof(string)));
fault.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Json));
webOperationContextWrapper.SetOutgoingResponseStatusCode(HttpStatusCode.InternalServerError);
}
}
Поэтому, когда YourCustomException
генерируется бизнес-логикой, он будет перехвачен обработчиком и преобразован в надлежащую ошибку.
См. Также: CodeProject статья