Pude replicar su problema y me interesé (ya que necesitaba lo mismo). Incluso investigué una forma de manejar excepciones \ catch chance chance pero lamentablemente no es posible (para código administrado) para .net framework 3.5 y siguientes.
En mi caso, siempre obtengo un System.ServiceModel.CommunicationObjectFaultedException
cada vez que algo sale mal en el servicio o cada vez que accedo a un servicio de bajada. Resulta que la declaración de C# using
es la causa porque detrás de la escena, la declaración using
siempre cierra la instancia del cliente de servicio incluso si ya se encontró una excepción (no salta directamente a la instrucción catch).
Lo que pasa es que la excepción original System.ServiceModel.EndpointNotFoundException
será reemplazada por la nueva excepción System.ServiceModel.CommunicationObjectFaultedException
cada vez que los using
trata de cerrar la instancia de cliente de servicio.
La solución que he hecho es no utilizar la instrucción using
modo que siempre que una excepción que se encuentre dentro del bloque try se tirará al instante la excepción de los bloques catch.
Trate de codificar algo como:
DashboardService.DashboardServiceClient svc = new Dashboard_WPF_Test.DashboardService.DashboardServiceClient();
try
{
svc.GetChart(0);
}
catch (System.ServiceModel.EndpointNotFoundException ex)
{
//handle endpoint not found exception here
}
catch (Exception ex)
{
//general exception handler
}
finally
{
if (!svc.State.Equals(System.ServiceModel.CommunicationState.Faulted) && svc.State.Equals(System.ServiceModel.CommunicationState.Opened))
svc.Close();
}
En lugar de:
try
{
using (DashboardService.DashboardServiceClient svc = new Dashboard_WPF_Test.DashboardService.DashboardServiceClient())
{
svc.GetChart(0);
}
}
catch (System.ServiceModel.EndpointNotFoundException ex)
{
//handle endpoint not found exception here (I was never able to catch this type of exception using the using statement block)
}
catch (Exception ex)
{
//general exception handler
}
y usted será capaz de detectar la excepción en ese momento.
Tal vez usted está tratando de ponerse en el lugar equivocado. ¿Has probado habilitar "Romper cuando se lanza una excepción"? (Depurar -> Excepciones del menú en VS) –
Sí, lo sé, así que sé que lo estoy atrapando en el lugar correcto. – paj777
Cuéntanos y publica el código que está fallando. Tengo un presentimiento, pero no tiene sentido escribir una respuesta sin más información. – Aaronaught