Обработка исключений в REST - PullRequest
1 голос
/ 07 марта 2011

Я создал службу REST, использующую WCF для связи с BLL / DAL из пользовательского интерфейса.Теперь я хотел бы реализовать обработку исключений с помощью некоторого способа глобализации в REST.Я использую HTTPClient для связи с REST от клиента.Ниже приведены способы, которыми я реализовал обработку исключений:

Подход 1:

OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse;
response.StatusCode = System.Net.HttpStatusCode.Unauthorized;
response.StatusDescription = ex.Message;
success = false;

Подход 2:

throw new WebProtocolException(HttpStatusCode.NotFound, ex.Message, null);

но почему-то я не могу пойматьих на стороне клиента.Пожалуйста, предложите несколько указателей для обработки исключений, вызванных сервисом в глобальном масштабе.


Я выкидываю WebProtocolException (подход 2) вместе с кодом ошибки и сообщением об ошибке из сервиса в пользовательский интерфейс, чтобы уведомить пользователей оисключение.Я могу получить код ошибки на стороне пользовательского интерфейса, но не получаю сообщение об ошибке или подробности.

Затем я создал другой сервис (с расширением .svc) и добавил следующую строку в разметку сервиса: "Factory = 'Microsoft.ServiceModel.Web.WebServiceHost2Factory».Теперь я могу получить сообщение об ошибке вместе с кодом ошибки на стороне клиента (UI).

Может кто-нибудь дать мне знать, как использовать метод WebServiceHost2Factory в моей существующей службе, которая является файлом класса, а не файлом .svc?

Любые предложения будут высоко оценены.Спасибо

1 Ответ

1 голос
/ 07 марта 2011

HttpClient не генерирует исключения, когда возвращается ответ, который не является "успешным".Если вы действительно хотите, чтобы исключения генерировались на стороне клиента, то позвоните

response.EnsureResponseIsSuccessful();

В противном случае просто проверьте код состояния на клиенте и решите, что делать на основе этого значения.

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

...