WCF Rest .NET 4.0 Необработанные исключения - PullRequest
1 голос
/ 02 ноября 2011

Я нашел кучу вопросов, которые были очень близки к тому, что мне нужно.Но я беспокоюсь, что упустил важную информацию.

Как перехватить все необработанные исключения с помощью WCF Rest с .NET 4.0?

В целях безопасности я не хочу, чтобы возникали необработанные исключенияклиенту.Я хочу регистрировать все исключения, а для неизвестных просто отправить обратно 500 Внутренняя ошибка сервера.

Мои лучшие исследования пока говорят мне, что мне нужно реализовать IErrorHandler и выдавать WebFaultExceptions для известных исключений.Одна проблема, с которой я столкнулся, заключается в том, что вся моя бизнес-логика находится в отдельном проекте от службы WCF, и нет смысла выбрасывать веб-исключение из базовой библиотеки классов, поскольку библиотека классов может использоваться другим процессом, которыйне может быть Службой Отдыха WCF.Есть ли хороший способ отобразить исключения?

1 Ответ

1 голос
/ 07 ноября 2011

Да, вы можете реализовать 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 статья

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...