2009-10-21 29 views
11

En ASP clásico, ¿hay alguna manera de manejar el error a nivel de aplicación?En ASP clásico, ¿hay alguna manera de manejar los errores a nivel de aplicación?

¿Existen pautas para manejar errores/excepciones en ASP 3 clásico? El Server.GetLastError() no es mucho para trabajar con ...

Estoy buscando algo así como el Application_Error() que se encuentra en una ASP.Net Global.asax.

Cualquier equivalente en un global.asa? Clases para registrar inteligentemente el error? Como una antigua gestión de excepciones de la biblioteca Enterprise para ASP3 ...

¡Hola, soy un soñador!

Muchas gracias por cualquier punteros

+0

¿Podemos suponer que está cargando objetos VB6? – ChaosPandion

+0

¿Crees que es posible crear un IHttpModule en .net y conectar tu módulo a un sitio web, solo para interceptar el error en el sitio web? –

+0

¿Puede dar un ejemplo de las actividades de nivel de aplicación en su Global.ASA que le preocupan? Además de ON ERROR RESUME NEXT, no creo que haya mucho ... – CLaFarge

Respuesta

10
try: 
    some code that can raise an error 
except: 
    do error handeling stuff 
finally: 
    clean up, close files etc 

puede ser emulado en VBScript de la siguiente manera:

class CustomErrorHandler 
    private sub class_terminate 
     if err.number > 0 then 
      do error handeling stuff 
     end if 
     clean up, close files etc 
    end sub 
end class  


with new CustomErrorHandler 
    some code 
    ... 
end with  

¿Cómo funciona esto WOR k? Se llamará al método 'class_terminate' cuando la instancia recién creada se salga del alcance. Esto sucede cuando el intérprete entra en la instrucción 'end with' o cuando la pila de llamadas se desenrolla debido a un error. Es menos bonito que el enfoque nativo de Python, pero funciona bastante bien y no es feo.

Para el manejo de errores de nivel superior puede utilizar la misma técnica. Esta vez, no use la instrucción with, sino que cree una instancia global de su manejador de errores. Tenga en cuenta que el objeto ASPError provisto server.getLastError() no es el mismo que el objeto vbscript err y solo está disponible después de que IIS haya realizado su transferencia de servidor. Al manipulador de errores 500: 100 y ha regresado a su página para recopilar el basura. Controlador de ejemplo:

class cDebugger 
    public sub do_debug 
    ' print debug data here 
    end sub 
    public sub class_terminate 
    if server.getlasterror().Number <> 0 then 
     response.clear 
     call do_debug 
    end if 
    end sub 
end class 
+0

¿Quiere decir crear un objeto cDebugger en cada solicitud? –

+0

De hecho.Tenemos dos clases de depuración en nuestra aplicación. En producción usamos uno que envía un informe de error por correo electrónico, y en desarrollo usamos uno que descarga el registro de depuración a la pantalla. El cambio entre desarrollo y producción se realiza a través de una configuración en el objeto de la aplicación. –

+0

@JoostMoesker Entiendo el enfoque CustomErrorHandler (try..catch..finally) pero no entendí el enfoque cDebugger para el manejo de errores de nivel superior. ¿Podrías dar un ejemplo más detallado? – Oliver

5

Desafortunadamente, Global.ASA solo proporciona los métodos Application_OnStart, Application_OnEnd, Session_OnStart and Session_OnEnd. Sin manejo de errores

Lo más cercano que puede obtener (AFAIK) es usar la característica Custom Errors en IIS para señalar a otro archivo o url para manejar el error.

Custom Errors Image

En mi opinión, es demasiado problema. Esta es una característica que falta que me hace migrar algunos sitios web, solo por la tranquilidad de saber que el sitio funciona sin errores.

3

Corrijo la página de error 500 en IIS a una página .asp de manejo de errores personalizada. Esta página luego usa Server.GetLastError para obtener el último error, envíeme un correo electrónico con detalles sobre el error, la cadena de consulta, las variables del servidor, etc. Luego, muestra un mensaje amigable para el usuario.

+0

¿Hay alguna manera de hacer esto ** SOLO ** para errores ASP, de modo que 500 errores en el código .NET no redirijan? –

+0

@JoshuaFrank Creo que el error 500: 100 es solo para errores de ASP – Oliver

Cuestiones relacionadas