Вопрос

Мой метод веб-службы возвращает объект коллекции, это будет хорошо сериализовано, благодаря тому, как работают веб-службы C #!

Но если мой код выдает неперехваченное исключение, я хочу вместо этого вернуть пользовательский объект error .

Возможно ли это с помощью C # ASP.NET v2?

Например,

Нормальная работа должна вернуться:

<Books>
    <book>Sample</book>
    <book>Sample</book>
</Books>

Но при ошибке я хочу

  <error>
      <errorMessage></errorMessage>
  </error>
Это было полезно?

Решение

Да, это возможно.

Что вам нужно будет изучить, так это Класс SoapException, и , в частности , Детальное свойство из класса SoapException.

Класс SoapException будет эффективно отображать "Ошибка Soap", который является совместимым со стандартами механизмом для возврата информации об ошибке клиентам / потребителям из метода веб-сервиса.

Свойство "Detail" класса SoapException имеет тип XmlNode - код и, таким образом, может содержать либо один узел / элемент, либо иерархию дочерних узлов.Таким образом, узел Detail может легко содержать и выступать в качестве "родительского" для сериализованного представления вашего собственного пользовательского объекта error.

Из MSDN:

Свойство Detail предназначено для предоставления сведений об ошибке конкретного приложения, связанных с элементом Body запроса SOAP.Согласно спецификации SOAP, если возникает ошибка из-за того, что запрос клиента не может быть обработан из-за элемента Body запроса SOAP, должно быть установлено свойство Detail.Если в записях заголовка запроса SOAP произошла ошибка, вы должны вызвать исключение SoapHeaderException, чтобы сведения об ошибке были возвращены в заголовке SOAP.Если ошибка не возникла из-за обработки элемента Body, то свойство Detail устанавливать не следует.

При создании XmlNode для свойства Detail свойства Name и пространства имен DetailElementName могут использоваться для обеспечения согласованности [sic] со спецификацией SOAP.

Все непосредственные дочерние элементы элемента detail называются элементами detail, и каждая запись detail кодируется как независимый элемент внутри элемента detail.

Обратите внимание, что если вы хотите, чтобы ответы вашей веб-службы оставались корректно совместимыми с SOAP, вам нужно будет вернуть Исключение SoapHeaderException вместо исключения SoapException если ошибка возникает в разделе заголовка клиента исходного XML-запроса (это часто может иметь место при использовании пользовательские заголовки SOAP например, дляучетные данные безопасности), как описано выше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top