обслуживать контекст ответа или нет - PullRequest
2 голосов
/ 23 ноября 2011

при вызове услуги с изменением состояния, например,

void SaveCustomer(Customer customer)

может произойти следующее

  1. параметры недействительны
  2. возникает исключение
  3. авторизация не удалась
  4. бизнес-правила нарушены
  5. все в порядке

Для условий 1-3 я думаю, что служба должна вернуть соответствующуюисключение Для # 4 я также думаю, что служба должна возвращать исключение, но некоторые полагают, что она должна возвращать объект, который отражает успех или нет вызова (объект ответа).

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

С объектом ответа нам нужно обработать путь обратно по стеку к службе (если (хорошо) и т. Д.), И мы можем 'не полагайтесь на исключение, отменяющее транзакцию.

Является ли какой-либо из этих вариантов антипаттерном?

1 Ответ

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

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

  • Ввод = запрос. Может быть определен только один раз для каждой операции.
  • Выход = успешный ответ. Может быть определен только один раз для каждой операции.
  • Ошибка = ожидаемый неудачный ответ. Вы можете иметь ноль или более ошибок, определенных для каждой операции.

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

В WCF ожидаемые ошибки обрабатываются с помощью FaultContract и общего FaultException<>. Проверьте эту статью и ее подразделы для ознакомления с обработкой ошибок.

Реализация обработки ошибок в основном зависит от вас. Возврат пользовательского объекта особенно полезен в сложных сценариях, где операция может быть успешной только частично, и вы должны сообщить как об успехе, так и о неуспешных деталях.

...