2014-01-13 3 views
1

У меня вопрос о исключениях WCF. Я реализую интерфейс IErrorHandler и создаю FaultException.Wcf Обработка ошибок с использованием интерфейса IErrorHandler

Мой вопрос заключается в следующем: когда я создаю FaultException, есть ли шаблон, который я должен выполнить для отправки дружественного сообщения об ошибке клиенту?

Я регистрирую фактическое исключение с использованием метода HandleError в базе данных и создавая FaultException в методе 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 метода для возврата дружественную Fault пользователя. Я также планирую использовать локализацию для отображения ошибок. Не уверен, что это будет сделано клиентом, или если служба должна отправить локализованные сообщения.

На основании того, что я прочитал, я не должен отправлять информацию о стеке из ошибок или ошибок EntityFramework, таких как ошибки EntityValidation и т. Д., Клиенту из-за соображений безопасности.

В этом случае мне нужно будет проверить тип исключения, и мои данные будут более уместными перед отправкой клиенту?

ответ

0

Главное требование - использовать атрибут FaultContractAttribute, поэтому WCF понимает выполнение контракта на обслуживание. См. http://msdn.microsoft.com/en-us/library/ms752208(v=vs.110).aspx

WCF также будет следить за тем, чтобы ваш WSDL отражал ваши контракты на неисправность.

Смежные вопросы