2008-10-28 2 views
1

Мы разрабатываем новый веб-сервис и изучаем «наилучшую практику» для возврата ошибок в реакции мыла.Обработка ошибок с использованием мыльных заголовков

Мы изучали создание объекта ответа об ошибке, который каждый ответ будет содержать как свойство. Это кажется немного тяжелым и интересно, можно ли использовать заголовок SOAP для переноса этой информации? Как обычно вы обрабатываете пользовательские ошибки с помощью SOAP?

ответ

1

SOAPFault используется для хранения ошибок и ошибок информацию о состоянии и сервер возвращает 500 в заголовке HTTP, чтобы указать его как ошибку.

см спецификации от w3.org

http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383507

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

+0

Это выглядит вроде того, что мы делаем. Вы порекомендовали бы это над пользовательским объектом ошибки, возвращенным в ответ? – Sheff 2008-10-28 11:14:58

2

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

Вы можете бросить SoapExceptions на сервере, если хотите больше контролировать сообщение/информацию о исключении.

Редактировать: За дополнительной информацией, а также с запросом, могут использоваться пользовательские мыльные заголовки. Вот example article on CodeProject, который использовал пользовательские заголовки мыла для аутентификации, но пользовательские заголовки мыла могут использоваться для других целей, таких как отправка дополнительной информации, которая не обязательно является условием ошибки (может быть информацией о бизнес-логике)

+0

Извините, я не уверен, что мой вопрос был настолько ясным, что я принимаю сообщение об ошибке бизнес-правила в ответе. Разве это не плохая практика бросать исключения, если вы можете избежать этого? – Sheff 2008-10-28 11:04:16

+0

Вы также можете добавить пользовательские заголовки мыла для ответа или запроса дополнительной информации вместе с запросом http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapheader.aspx – 2008-10-28 11:11:24

0

Я использовал подобные методы в прошлом для сложных операций. Особенно, когда вам нужны (множественные?) Описания ошибок, а также код ошибки.

0

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

  • Если mustUnderstand отсутствует или 0, клиент может спокойно их игнорировать.
  • if mustUnderstand is 1, клиент не может сигнализировать, что он не понимает его (поскольку это ответ).

И да, я знаю, что некоторые WS- * стандарты описывают мыльные заголовки в ответ ...

Так,

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

Смежные вопросы