Controlar y generar excepciones en servicios web XML

Este tema es específico de una tecnología heredada. Ahora, los servicios Web XML y los clientes de servicios Web XML deben crearse con Windows Communication Foundation.

Las excepciones iniciadas por un método de servicio Web creado con ASP.NET se devuelven al cliente en el formulario de un error de SOAP. Un error de SOAP es un elemento XML Fault dentro de un mensaje SOAP que especifica cuando se produjo un error. Puede contener detalles como la cadena de excepciones y el origen de la excepción. Para obtener detalles acerca de los errores de SOAP, consulte la especificación SOAP en el sitio web de W3C (http://www.w3.org/TR/SOAP).

Afortunadamente, los clientes y el servicio Web creados con ASP.NET no rellenan o analizan directamente el elemento XML Fault, sino que utilizan el modelo de diseño común para iniciar y detectar las excepciones en .NET Framework. Un servicio Web puede producir una SoapException genérica o una excepción concreta al problema, como ArgumentOutOfRangeException. De cualquier modo, ASP.NET serializa la excepción en un mensaje SOAP válido colocando la excepción en un elemento de SOAP Fault. Cuando el mensaje SOAP se deserializa en un cliente de ASP.NET, el error de SOAP se convierte en una excepción SoapException, con los detalles de excepción colocados en la propiedad Mensaje. Un cliente puede preparar así un bloque try/ catch para detectar un SoapException. Un ejemplo de código de un servicio Web que produce una excepción se proporciona en Cómo: Las excepciones generadas de un servicio Web creado con ASP.NET. Un ejemplo de código de un cliente de servicios Web que detecta una excepción se proporciona en Cómo: Administrar excepciones iniciadas por un método de servicio Web.

Una aplicación web puede consistir en varios servicios Web. Sin embargo, el evento Application_Error dentro del archivo de sintaxis Global.asax no se puede utilizar para el control de excepciones global. El HttpHandler para los servicios Web utiliza cualquier excepción que produce mientras un servicio Web se está ejecutando y lo convierte en un error de SOAP antes de que se llame al evento Application_Error. Genere una extensión SOAP para procesar las excepciones en un controlador de excepciones global. Una extensión SOAP puede comprobar la existencia de una excepción en el método ProcessMessage. Dentro del método ProcessMessage, compruebe la propiedad excepción de SoapMessage pasada cuando la propiedad fase está establecida en AfterSerialize. Para obtener detalles sobre extensiones SOAP, vea Modificación del Mensaje SOAP mediante extensiones SOAP.

Generar excepciones desde un servicio Web creado con ASP.NET

Para propagar de nuevo los errores a un cliente, genere las excepciones. Un método de servicio Web puede hacer esto de la manera siguiente:

  • Produce una excepción SoapException .

  • Produce una excepción SoapHeaderException .

  • Producir una excepción concreta del problema.

  • Permita a ASP.NET producir la excepción.

La tabla siguiente describe las excepciones que un servicio Web puede producir explícitamente y cómo un cliente de ASP.NET recibe cada excepción:

Tipo de excepción generada Lo que un servicio Web puede hacer, lo que un cliente recibe

Excepción distinta de SoapException o SoapHeaderException

Un método de servicio Web detecta un caso de excepción e inicia la excepción concreta, como ArgumentOutOfRangeException. Un cliente de .NET Framework recibe SoapException con los detalles serializados en el texto en la propiedad mensaje.

SoapException

Un método de servicio Web detecta un caso de excepción e inicia una SoapException. También proporciona los detalles adicionales con respecto al problema. El método de servicio Web rellena la propiedad detalle para proporcionar esta información adicional. Un cliente de .NET Framework recibe SoapException con la información adicional.

SoapHeaderException

Un método de servicio Web detecta un caso de excepción procesando un elemento de SOAP Header. El método de servicio Web inicia una SoapHeaderException, que traduce en un elemento Fault colocado dentro del elemento Header de la respuesta. El error debe aparecer en el encabezado de respuesta en esta situación según la especificación SOAP. Un cliente de .NET Framework recibe SoapHeaderException.

Debería producirse una excepción específica del problema o proporcionar los detalles adicionales a SoapException o SoapHeaderException, como se describe en la tabla anterior.

Excepciones no administradas por un método de servicios Web XML

Si un método de servicio Web no detecta ninguna excepción producida dentro del método, la tabla siguiente describe cómo ASP.NET administra la excepción.

Cuando se producen excepciones no controladas Cómo actúa ASP.NET

Mientras se ejecuta el método de servicio Web

La excepción es detectada por ASP.NET y devuelta al cliente. El cliente de servicios Web creado con .NET Framework recibe SoapException con los detalles de excepción colocados en la propiedad mensaje.

Procesando los encabezados SOAP

ASP.NET inicia una SoapHeaderException. Un cliente de servicios Web creado con .NET Framework recibe SoapHeaderException.

Vea también

Tareas

Cómo: Generar excepciones desde un servicio web creado con ASP.NET
Cómo: Controlar excepciones generadas por un método de servicio Web

Referencia

SoapException Class
SoapHeaderException Class

Conceptos

Generar clientes de servicios web XML

Otros recursos

Handling and Throwing Exceptions
Servicios web XML con ASP.NET