Обработка и создание исключений в XML-веб-службах

Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.

Исключения, созданные методом веб-службы, который был создан с помощью ASP.NET, возвращаются клиенту в форме ошибки SOAP. Ошибка SOAP представляет собой элемент XML Fault в сообщении SOAP, указывающий, когда произошла ошибка. Он может содержать такие сведения, как строка исключения и источник исключения. Подробные сведения об ошибках SOAP см. в спецификации протокола SOAP на веб-сайте W3C (http://www.w3.org/TR/SOAP).

К счастью, клиенты и веб-службы, созданные с использованием ASP.NET, не заполняют и не анализируют элемент XML Fault непосредственно, а используют общий шаблон разработки для создания и перехвата исключений в платформе .NET Framework. Веб-служба может создать либо универсальное исключение SoapException, либо исключение, специфичное для проблемы, такое как ArgumentOutOfRangeException. В любом случае ASP.NET сериализует исключение в допустимое сообщение SOAP путем помещения исключения в элемент SOAP Fault. Когда сообщение SOAP десериализуется в клиенте ASP.NET, ошибка SOAP преобразуется в исключение SoapException, а сведения об исключении помещаются в свойство Message. Таким образом клиент может создать блок try/catch для перехвата исключения SoapException. Пример кода веб-службы, создающей исключение, приводится в разделе «Практическое руководство. Вызов исключений из веб-службы, созданной с помощью ASP.NET». Пример кода клиента веб-службы, обрабатывающего исключение, приводится в разделе «Практическое руководство. Обработка исключений, вызванных методом веб-службы».

Веб-приложение может содержать несколько веб-служб. Однако событие Application_Error из файла синтаксиса Global.asax не может использоваться для обработки глобальных исключений. Обработчик HttpHandler для веб-служб получает любые исключения, происходящие при работе веб-служб, и преобразует их в ошибку SOAP перед вызовом события Application_Error. Постройте расширение SOAP для обработки исключений веб-служб в обработчике глобальных исключений. Расширение SOAP может проверять существование исключения в методе ProcessMessage. В методе ProcessMessage проверьте свойство Exception сообщения SoapMessage, переданного, когда для свойства Stage задано значение AfterSerialize. Подробные сведения о расширениях SOAP см. в разделе Изменение сообщений SOAP с помощью расширений SOAP.

Создание исключения из веб-службы, созданной с использованием ASP.NET

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

  • Создать исключение SoapException.

  • Создать исключение SoapHeaderException.

  • Создать исключение специально для проблемы.

  • Позволить ASP.NET создать исключение.

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

Тип созданного исключения Что может сделать веб-служба, что получает клиент

Исключение, отличное от SoapException или SoapHeaderException

Метод веб-службы обнаруживает случай исключения и создает конкретное исключение, например ArgumentOutOfRangeException. Клиент платформы .NET Framework получает исключение SoapException со сведениями, сериализованными в виде текста в свойстве Message.

SoapException

Метод веб-службы обнаруживает случай исключения и создает исключение SoapException. Он также предоставляет дополнительные сведения о проблеме. Метод веб-службы заполняет свойство Detail для передачи такой дополнительной информации. Клиент платформы .NET Framework получает исключение SoapException с дополнительной информацией.

SoapHeaderException

Метод веб-службы обнаруживает случай исключения во время обработки элемента SOAP Header. Метод веб-службы создает исключение SoapHeaderException, которое преобразуется в элемент Fault, помещенный внутрь элемента Header ответа. В этой ситуации ошибка должна отображаться в заголовке ответа в соответствии со спецификацией SOAP. Клиент платформы .NET Framework получает исключение SoapHeaderException.

Необходимо создать исключение специально для проблемы, или предоставить дополнительные сведения в исключении SoapException или SoapHeaderException, как описано выше в таблице.

Исключения, не обрабатываемые методом XML-веб-службы

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

Когда происходит необработанное исключение Действия ASP.NET

Во время выполнения метода веб-службы

Исключение перехватывается ASP.NET и передается назад клиенту. Клиент веб-службы, созданный с помощью платформы .NET Framework, получает исключение SoapException со сведениями об исключении, занесенными в свойство Message.

Во время обработки заголовков SOAP

ASP.NET создает исключение SoapHeaderException. Клиент веб-службы, созданный с помощью платформы .NET Framework, получает исключение SoapHeaderException.

См. также

Задачи

Как вызвать исключения из веб-службы, созданной с помощью ASP.NET
Как обработать исключения, вызванные методом веб-службы

Справочник

SoapException Class
SoapHeaderException Class

Основные понятия

Создание клиентов XML-веб-службы

Другие ресурсы

Handling and Throwing Exceptions
XML-веб-службы с использованием ASP.NET