En mi clase de cliente WCF estoy manejando el evento Faulted()
de modo que si el servicio remoto arroja una excepción y falla el canal, al menos puedo cerrarlo con gracia. Aquí está mi código:¿Qué es System.ServiceModel.Diagnostics.CallbackException y por qué no puedo manejarlo?
protected void RemoteDataRetriever_Faulted(object sender, EventArgs e)
{
(sender as ICommunicationObject).Abort();
this.Dispose();
throw new ChannelTerminatedException("The remote service threw an unhandled exception and as a result the channel has been closed.");
}
Así que lo que se espera es que el cliente puede manejar el ChannelTerminatedException
que he tirado manualmente y enviar un mensaje al usuario, etc. En cambio mi excepción se está envuelto en una System.ServiceModel.Diagnostics.CallbackException
. Está bien. Excepto que aquí está el truco: esta CallbackException no existe en la biblioteca de ServiceModel y parece que no hay forma de que la maneje excepto como genérico Exception
, lo cual no me sirve para las pruebas de mi unidad. ¿Qué diablos está pasando aquí? ¿Puedo desactivarlo de alguna manera y lanzar la excepción que originalmente quería?
Dado que usted mismo está lanzando la excepción, ¿puede usar otra excepción que no se ajuste? Estoy pensando en algo que no expone el hecho de que estás usando WCF debajo de todo ... –
Sin dados. Cambié la excepción ChannelTerminatedException a StackOverflowException ;-) y todavía está envuelto en esa molesta CallbackException (la que lanzo termina siendo la excepción interna). Y luego aparece el mensaje molesto: "Una devolución de llamada del usuario arrojó una excepción. Verifique la excepción y la excepción interna para determinar la devolución de llamada que falló". Sí, sé que la devolución de llamada arrojó una excepción. Yo fui quien lo tiró! Voy a investigar más y ver si hay una bandera/parámetro WCF en alguna parte que pueda usar para desactivar este comportamiento. –