Pregunta

Tengo algunos servicios web REST implementados en WCF. Deseo que estos servicios devuelvan " Mala solicitud " cuando el xml contiene elementos inválidos.

XmlSerializer está manejando la serialización xml. Por defecto, XmlSerializer ignora los elementos desconocidos. Sé que es posible enganchar XmlSerializer.UnknownElement y lanzar una excepción desde este controlador, pero como esto está en WCF no tengo control sobre la serialización. ¿Alguna idea de cómo podría implementar este comportamiento.

¿Fue útil?

Solución

" Sé que es posible enganchar XmlSerializer.UnknownElement y lanzar una excepción desde este controlador, pero como está en WCF no tengo control sobre la serialización "

Es realmente posible hacer esto ...

En un proyecto de WCF en el que trabajé, hicimos algo similar utilizando la interfaz IDispatchMessageFormatter.

Puede encontrar más información aquí http://nayyeri.net/blog/use-idispatchmessageformatter-and-iclientmessageformatter-to-customize-messages-in-wcf/

Le permite alcanzar el máximo en los encabezados de mensajes, control de serialización / deserialización, códigos de estado de retorno, etc.

Otros consejos

Tal vez pueda devolver su propio tipo implementando IXmlSerializable y lanzar la excepción que desee en los métodos ReadXml y WriteXml ...

Esto proviene de una memoria vaga, ya que no tengo todo el código disponible, pero puede crear un tipo de Mensaje personalizado (heredado para la clase " Mensaje ") para devolverlo en sus servicios REST y anular ciertos métodos para crear respuestas personalizadas.

    protected override void OnWriteMessage(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteStartBody(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
    {
        ...
    }

No es una respuesta completa, pero podría empujarte por el camino correcto.

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