Estoy tratando de atrapar una FaultException dada en un cliente WCF. Básicamente necesito extraer una descripción interna de la clase de falla para que luego pueda empaquetarla en otra excepción para que las capas superiores hagan lo que sea.FaultException.Detail volver vacío
He hecho esto con éxito varias veces, lo que lo hace diferente esta vez es que la falla se declara como una matriz, como se puede ver en el atributo de referencia de servicio declarado sobre el método que arroja la excepción:
[System.ServiceModel.FaultContractAttribute(typeof(FaultClass[]), Action = "http://whatever/", Name = "whateverBusinessFault")]
Este es mi código:
try
{
// call service here
}
catch (FaultException<FaultClass[]> ex)
{
if (ex.Detail != null && ex.Detail.Length > 0)
{
throw new CustomException(ex.Detail[0].description);
}
else
{
throw;
}
}
problema es Detalle (que es una matriz) está volviendo siempre vacía en el código, incluso si puedo ver los datos (descripción de campo, etc.) en el respo de SOAP nse de traza de WCF.
Así que las cosas que necesito definitivamente vuelven, pero por alguna razón o no se deserializa o no puedo obtenerlo desde el código.
Cualquier ayuda apreciada!
ACTUALIZACIÓN:
Tratando con @Darin sugerencia, pero sin suerte, la cadena que estoy extrayendo del XmlReader es "/ r/n":
var sb = new StringBuilder();
using (XmlReader reader = fault.GetReaderAtDetailContents())
{
while (reader.Read())
sb.AppendLine(reader.ReadOuterXml());
}
var detail = sb.ToString();
se parece a la sección de detalle es ¡no viene para nada!
¿Qué sucede si modifica su código (solo para prueba) para usar solo FaultClass (no matriz)? –
ya lo intenté, no detecta la excepción – JohnIdol
Esta pregunta no se puede responder sin una respuesta de falla de muestra o el esquema real del error personalizado definido en el WSDL –