Sv Community El Salvador
Soporte y Tecnología => Programación => .NET => Mensaje iniciado por: edu_guerr en 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.
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:
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?
-
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
-
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?
-
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.
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 (https://msdn.microsoft.com/es-es/library/jj135057.aspx)
-
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.