tipo pasar parametros objetos metodos locales las inicializar implícito deben con como c# asp.net exception-handling aop

pasar - metodos en c#



¿Cómo obtener un volcado de todas las variables locales? (3)

Esta es una pregunta que se hace en el Desbordamiento de Pila, aunque se expresa de manera diferente. En un hilo, la respuesta fue usar PostSharp . Como otros han sugerido volcar la traza de pila , puedes hacer eso. Lo más fácil sería volcar manualmente las variables locales. Esto puede ser de seguimiento o puede crear su propio controlador de excepciones personalizado.

¿Cómo puedo obtener un volcado de todas las variables de sesión y locales cuando se produce una excepción? Estaba pensando en escribir algún tipo de función basada en la reflexión que interrogaría la función de llamada y crearía un volcado de variables y valores.

¿Hay una biblioteca existente que pueda usar?

ACTUALIZAR

Después de hablar con un colega, me señalaron AOP o Programación Orientada a Aspectos. Esto es lo que entiendo ... Usando AOP, uno simplemente decoraría los métodos y clases con ciertos atributos. AOP framework luego inyecta código en o alrededor de estas clases y métodos. Hay dos tipos diferentes de marcos, uno que inyecta el código y luego compila el ensamblaje y el segundo simplemente usa la función de reflejo y captura la llamada que ha decorado y envuelve el código del método en tiempo de ejecución.

Espero que todo eso tenga sentido. Voy a hacer más investigación sobre esto y publicar mi enfoque.

Gracias chicos ...


No debe utilizar el manejo de excepciones en el formulario Try Catch. Más bien, debería ser

  1. Error de nivel de página
  2. Error de nivel de aplicación

Supongamos que tiene una capa de presentación y una capa de lógica de negocios / capa de acceso a datos.

Al enfrentar el error en la lógica empresarial, por ejemplo, se moverá directamente al archivo Glogal.asax.cs en el evento Application_Error sin volver a la función de llamada. Aquí puedes registrar el mensaje de error como abajo ...

HttpContext.Current.Server.GetLastError().InnerException.StackTrace HttpContext.Current.Server.GetLastError().InnerException.Message HttpContext.Current.Server.GetLastError().InnerException.Source HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.FullName HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.Name HttpContext.Current.Server.GetLastError().InnerException.TargetSite.DeclaringType.Namespace

En el caso de un error de nivel de página, la prioridad es la Anulación de error de página y, finalmente, el evento de error de nivel de aplicación. Aquí también puedes registrar errores.

Preferiré el controlador Application_error porque si tiene 20 módulos y una situación, debe crear una clase de base para cada módulo. No es bueno hacer redundancia de código.

Ahora, en la Configuración web, puede escribir código para redirigir al usuario en alguna página predeterminada, como a continuación.

<customErrors defaultRedirect="ErrorPage.htm" mode="On"> <error statusCode="404" redirect="ErrorPageNotFound.htm"/> </customErrors>


No estoy seguro de si esto es lo que estás buscando. Pero si estás en un bloque de captura, puedes obtener todos los campos y propiedades de esta clase de la siguiente manera:

try { double d = 1 / 0; } catch (Exception ex) { var trace = new System.Diagnostics.StackTrace(); var frame = trace.GetFrame(1); var methodName = frame.GetMethod().Name; var properties = this.GetType().GetProperties(); var fields = this.GetType().GetFields(); // public fields // for example: foreach (var prop in properties) { var value = prop.GetValue(this, null); } foreach (var field in fields) { var value = field.GetValue(this); } foreach (string key in Session) { var value = Session[key]; } }

He mostrado cómo obtener el nombre del método en el que se produjo la excepción solo por razones de integridad.

Con BindingFlags puede especificar restricciones, por ejemplo, que solo desea las propiedades de esta clase y no de las heredadas:

Usando GetProperties () con BindingFlags.DeclaredOnly en .NET Reflection

Por supuesto, lo anterior debería darle solo un punto de partida de cómo hacerlo manualmente y usted debería resumir todo en clases. Nunca lo he usado, así que no está probado.