Как создать сообщение WCF, эквивалентное HTTP 403, из IErrorHandler?
Я хочу написать реализацию IErrorHandler, которая будет обрабатывать AuthenticationException
экземпляры (запатентованный тип), а затем в реализации ProvideFault
предоставить традиционный Http-ответ с кодом состояния 403 в качестве сообщения об ошибке.
Пока у меня есть первое предположение, связанное с сервисом, но WCF, похоже, полностью игнорирует выходное сообщение, хотя вызывается обработчик ошибок.
На данный момент код выглядит так:
public class AuthWeb403ErrorHandler : IErrorHandler
{
#region IErrorHandler Members
public bool HandleError(Exception error)
{
return error is AuthenticationException;
}
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
//first attempt - just a stab in the dark, really
HttpResponseMessageProperty property = new HttpResponseMessageProperty();
property.SuppressEntityBody = true;
property.StatusCode = System.Net.HttpStatusCode.Forbidden;
property.StatusDescription = "Forbidden";
var m = Message.CreateMessage(version, null);
m.Properties[HttpResponseMessageProperty.Name] = property;
fault = m;
}
#endregion
}
Имея это в виду, я просто получаю стандартный html WCF. Сервер обнаружил ошибку при обработке запроса. Смотрите журналы сервера для более подробной информации.' - что бы произошло, если бы не было IErrorHandler. Это функция поведения, добавленная WebServiceHost? Или это потому, что сообщение, которое я создаю, просто неверно!? Я могу убедиться, что журнал событий действительно ничего не получает.
Моя текущая тестовая среда - это метод WebGet (как XML, так и Json), размещенный в службе, которая создается с отключенной совместимостью Asp.Net с WebServiceHostFactory. Сервисный метод просто вызывает исключение.
1 ответ
Попробуйте это: Возврат сведений об ошибке из службы WCF с поддержкой AJAX
и это
http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/