Если веб-сервисы выдают исключения ИЛИ объекты результата

Вы уверены, что находитесь в Bash? У меня работает все три способа:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello\n'world
12
задан John Saunders 5 March 2014 в 13:13
поделиться

6 ответов

О какой трассировке стека вы говорите? Вы пробовали это?

В службах ASMX и WCF неперехваченное исключение будет преобразовано в ошибку SOAP. В обоих случаях их можно настроить так, чтобы не включать трассировку стека. Фактически, это значение по умолчанию в WCF.

Итак, правильный способ вернуть такую ​​ошибку - это ошибка. Один из способов создания ошибок - это генерировать исключение, а не обрабатывать его.

6
ответ дан 2 December 2019 в 20:19
поделиться

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

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

Итак, применительно к веб-службам - в общем случае выдают исключения (что приводит к SoapFault). Это позволяет вызывающему клиентскому коду использовать встроенный стандарт обработки исключений для его обработки.

8
ответ дан 2 December 2019 в 20:19
поделиться

один из подходов - разделить системные и бизнес-ошибки. (Системная ошибка: например, неверно сформированный запрос, пользователь не авторизован и т. Д .; бизнес-ошибка: например, метод UpdateCars приводит к ошибке, у пользователя нет автомобилей).

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

2
ответ дан 2 December 2019 в 20:19
поделиться

Can you clarify a bit? The server-side of a web service can throw an exception. The server-side of a web service can return a message to the client-side. That message may contain error information, and that error information may specifically include exception details. Or it may not. On the client-side, you typically have a generated proxy to deal with the message from the server. This proxy may generate an exception if that response contains error information.

Which part of this scenario are you wondering about?

0
ответ дан 2 December 2019 в 20:19
поделиться

Я не понимаю, почему вы не можете сделать и то, и другое? Перехватите исключение, запишите его (в БД или в файл), а затем верните код ошибки. Таким образом у вас будет изящное выполнение вызова веб-службы, а также уведомление об ошибке, и у вас будет место в другом месте, где вы можете продолжить отладку.

0
ответ дан 2 December 2019 в 20:19
поделиться

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

public void MyWebServiceMethod () {
попробуйте
{

  /// Сделайте что-нибудь, что может вызвать ошибку

} catch (исключение)
{ throw new ApplicationException ("Удобный для пользователя описание исключения ");

}

}

или вы также можете

перехватить (Exception ex) { бросить экс; }

Если вы повторно вызовете исключение, вы скроете исходную трассировку стека от клиентов ваших веб-служб.

0
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: