Pregunta

Mi método de servicio Web devuelve un objeto de colección, esta serializará muy bien, gracias a la forma en C # servicios web trabajo!

Pero si mi código produce una excepción no capturada, quiero devolver un objeto en lugar de error personalizado.

¿Es esto posible usando C # ASP.NET v2?

Por ejemplo,

El funcionamiento normal debe regresar:

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

Pero el error Quiero

  <error>
      <errorMessage></errorMessage>
  </error>
¿Fue útil?

Solución

Sí, esto es posible.

Lo que usted tiene que mirar en es la clase SoapException , y específicamente el detalle de la propiedad de la clase SoapException.

La clase SoapException hará que efectivamente un " error de SOAP ", que es las normas según norma mecanismo para devolver información de error a los clientes / consumidores de un método de servicio web.

La propiedad "Detalle" de la clase SoapException es de tipo XmlNode y puede pues contener un único nodo / elemento o una jerarquía de nodos secundarios. Por lo tanto, el nodo Detalle podría contener fácilmente y actuar como el "padre" de la representación serializada de su propio objeto de error personalizado.

A partir de MSDN:

  

La propiedad detalle está destinado a suministrar detalles específicos de la aplicación de error relacionados con el elemento del cuerpo de la solicitud SOAP. De acuerdo con la especificación SOAP, si un error occurrs debido a la solicitud del cliente no se pudo procesar debido al elemento de Administración de la solicitud SOAP, la propiedad detalle se debe ajustar. Si ocurrió un error en las entradas de encabezado de la solicitud SOAP, debe lanzar una SoapHeaderException, por lo que los detalles de los errores se devuelven en el encabezado SOAP. Si no se produjo el error, debido al procesamiento del elemento de cuerpo, entonces la propiedad de Detalle no debe ser fijado.

     

En la construcción de un XmlNode para la propiedad Detalle, las propiedades del nombre y de espacio de nombres de DetailElementName se pueden utilizar para asegurar consistencia [sic] con la especificación SOAP.

     

Todos los elementos secundarios inmediatos del elemento de detalle se llaman entradas detalle y cada entrada detalle se codifica como un elemento independiente dentro del elemento de detalle.

Tenga en cuenta que si desea permanecer correctamente de SOAP compatible con sus respuestas de servicio web, que necesitará para devolver un SoapHeaderException en lugar de un SoapException si el error se produce dentro de la sección de cabecera del cliente de la solicitud XML original (esto puede ser a menudo el caso cuando se utiliza para las credenciales de seguridad, por ejemplo) como se detalla anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top