Как создать сообщение WCF, эквивалентное HTTP 403, из IErrorHandler? - PullRequest
1 голос
/ 26 января 2010

Я хочу написать 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
}

Имея это, я просто получаю стандартный WCF html 'Сервер обнаружил ошибку при обработке запроса. Смотрите журналы сервера для более подробной информации. ' - что бы произошло, если бы не было IErrorHandler. Это функция поведения, добавленная WebServiceHost? Или это потому, что сообщение, которое я создаю, просто неверно !? Я могу убедиться, что журнал событий действительно ничего не получает.

Моя текущая среда тестирования - это метод WebGet (как XML, так и Json), размещенный в службе, которая создается с отключенной совместимостью Asp.Net с WebServiceHostFactory. Сервисный метод просто выбрасывает исключение, о котором идет речь.

1 Ответ

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