Controlando el WCF XmlSerializer
-
03-07-2019 - |
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.
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.