Обработка и создание исключений в 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