Autor Tema: Controlar exception llamando otro metodo - C#  (Leído 3098 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Controlar exception llamando otro metodo - C#
« : julio 13, 2016, 12:05:45 pm »
Buen dia estimados.

A ver si me aconsejan  con lo siguiente:

**Lenguaje C#

Basicamente tengo:

InterfazA
 --methodA()
 
 
 InterfazB
  --methodB()
   
   
Cuando llamo a "methodB()" obtengo una exception debido a que "methodA()" es parte de un servicio
el cual se expira cada cierto tiempo y la unica solucion es modificar el codigo para que esto no pase.


Esta exception la podria controlar facilmente con un try-catch, y que cuando me de la exception volver a llamar al
"methodA" de nuevo y de hecho me funciona si lo hago asi.
Código: [Seleccionar]
            try
            {
                var p = methodA<InterfazB>();
                p.methodB();
            }
            catch (Exception dex)
            {
                 var p = methodA<InterfazB>();
p.methodB();
            }
   


Pero..por estandar no puedo usar try-catch en esta parte del codigo debido a que usamos propagacion de excepciones.

Lo que quiero hacer es:

Cuando llame al  methodB() si me da una exception, llame methodA() nuevamente.

******************************************************
Se me ocurre usar delegados y Lambda algo asi:
Código: [Seleccionar]

invoke(s => s.methodA());
   
Y poner el try-catch en el metodo Invoke el cual esta en otra capa y si puedo usarlo, pero no me funciona.

Alguna sugerencia?

Desconectado smog

  • Sv Member
  • ***
  • Mensajes: 122
Re:Controlar exception llamando otro metodo - C#
« Respuesta #1 : julio 13, 2016, 12:14:18 pm »
Una duda entre el llamado a metA y metB existen más instrucciones? sino no veo por que razón habría de funcionar en el catch si es el mismo código que en el try

Desconectado g00mba

  • The Communiter-
  • *
  • Mensajes: 14586
  • SOMOS LEGION
    • ALABADO SEA MONESVOL
Re:Controlar exception llamando otro metodo - C#
« Respuesta #2 : julio 13, 2016, 12:22:46 pm »
pregunta tonta, si sabes que el servicio se expira de manera regular, porque no incluis eso en la logica principal en lugar de controlarlo con un try-catch si tenes que considerar propagacion de excepciones?

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re:Controlar exception llamando otro metodo - C#
« Respuesta #3 : julio 13, 2016, 01:08:49 pm »
Una duda entre el llamado a metA y metB existen más instrucciones? sino no veo por que razón habría de funcionar en el catch si es el mismo código que en el try
Fijate que si es el mismo codigo del try, y en el catch funciona porque el servicio que ya estaba expirado se vuelve a llamar con methodA() y asi se renueva y ya no da la exception.

Código: [Seleccionar]
  catch (Exception dex)
            {
                 var p = methodA<InterfazB>();
          p.methodB();
            }

pregunta tonta, si sabes que el servicio se expira de manera regular, porque no incluis eso en la logica principal en lugar de controlarlo con un try-catch si tenes que considerar propagacion de excepciones?
Si fijate que intente hacer eso, pero por ser varios soluciones cuando por fin el response llega a la logica principal solo manda un error pero bien generico, el cual puede darse por la exception que les mencione o por cualquier otro caso que no tiene que ver.

Otra solucion que probe fue aumentar el timeout del servicio en la configuracion de los binding (para asi no tocar codigo) y tambien funciona, pero por cuestion de recursos no puedo aumentar el tiempo para que el servicio no se expire.

Debido a todo eso, lo que mas se acerca es hacerlo con delegados pero no me quiero cerrar a eso.
https://msdn.microsoft.com/es-es/library/jj135057.aspx



Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re:Controlar exception llamando otro metodo - C#
« Respuesta #4 : julio 14, 2016, 08:22:41 am »
iba a escribir varias cosas, pero primero quiero saber:

que hace la InterfazB, cuando el servicio  de MethodA dejo de existir?

en tu problema quedan varias cosas en el aire... yo por ejemplo en una parte de mi programa, que interactúo con modificaciones de varios usuarios uso notificaciones asyncronicas, metiendo la DB en medio de todo, no hay alguna alternativa por ahí? esto no es nada de lo que iva a escribir respecto a tu problema puntual de los delegates.
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito