Cuando se produce una excepción no controlada en un Microsoft basadas en ASP.NET se cierra la aplicación que se integra en Microsoft .NET Framework 2.0, la aplicación inesperadamente. Cuando se produce este problema, no información de excepción que debe tener para comprender el problema se registra en el registro de aplicación.
Sin embargo, puede anotarse un mensaje de suceso similar al siguiente en el registro del sistema:
Tipo de suceso: advertencia Origen del suceso: W3SVC Categoría del suceso: ninguna ID. de suceso: 1009 Fecha: 28/9/2005 Hora: 3: 18: 11 P.M. usuario: N/d Equipo: IIS-SERVER Descripción: Un proceso para el grupo de aplicaciones ? DefaultAppPool ? terminó inesperadamente. El identificador del proceso era ? 2548 ?. El código de salida de proceso fue ? 0xe0434f4d ?.
Además, puede anotarse un mensaje de suceso similar al siguiente en el registro de aplicación:
Tipo de suceso: error Origen del suceso: .NET Runtime 2.0 informe de errores Categoría del suceso: ninguna ID. de suceso: 5000 Fecha: 28/9/2005 Hora: 3: 18: 02 P.M. Usuario: N/d Equipo: IIS-SERVER Descripción: EventType clr20r3, w3wp.exe P1, P2 6.0.3790.1830, P3 42435be1, app_web_7437ep 4-9, P5 0.0.0.0, P6 433b1670, P7 9, P8, P9 system.exception, P10 NIL.
Este problema se produce porque ha cambiado la directiva predeterminada para las excepciones no controladas en .NET Framework 2.0. De forma predeterminada, la directiva para las excepciones no controladas es terminar el proceso de trabajo.
En Microsoft .NET Framework 1.1 y en Microsoft .NET Framework 1.0, se han ignorado las excepciones no controladas en subprocesos administrados. A menos que adjunta un depurador para detectar la excepción, podría no observa que nada no es correcto.
ASP.NET utiliza la directiva predeterminada para las excepciones no controladas en .NET Framework 2.0. Cuando se inicia una excepción no controlada, la aplicación basada en ASP.NET se cierra inesperadamente.
Este comportamiento no se aplica a las excepciones que ocurren en el contexto de una solicitud. Estos tipos de excepciones todavía se controlan y rodeados de un objeto HttpException . Las excepciones que ocurren en el contexto de una solicitud no hacen que el proceso de trabajo terminar. Sin embargo, las excepciones no controladas fuera del contexto de una solicitud, como excepciones en un subproceso de temporizador o en una función de devolución de llamada, hacen que el proceso de trabajo terminar.
Modifique el código de origen para el objeto de IHttpModule de modo que registrará información de excepción en el registro de aplicación. La información que se registra incluirá las siguientes:
La ruta del directorio virtual en el que se produjo la excepción
El nombre de excepción
El mensaje
El seguimiento de pila
Para modificar el objeto de IHttpModule , siga estos pasos.
Nota Este código registrará un mensaje que tiene el tipo de evento de error y el origen de eventos de ASP.NET 2.0.50727.0 en el registro de aplicación. Para probar el módulo, solicitud de página ASP.NET que utiliza el método ThreadPool.QueueUserWorkItem para llamar a un método que inicia una excepción no controlada.
Coloque el código siguiente en un archivo que se denomina UnhandledExceptionModule.cs.
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Web;
namespace WebMonitor {
public class UnhandledExceptionModule: IHttpModule {
static int _unhandledExceptionCount = 0;
static string _sourceName = null;
static object _initLock = new object();
static bool _initialized = false;
public void Init(HttpApplication app) {
// Do this one time for each AppDomain.
if (!_initialized) {
lock (_initLock) {
if (!_initialized) {
string webenginePath = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "webengine.dll");
if (!File.Exists(webenginePath)) {
throw new Exception(String.Format(CultureInfo.InvariantCulture,
"Failed to locate webengine.dll at '{0}'. This module requires .NET Framework 2.0.",
webenginePath));
}
FileVersionInfo ver = FileVersionInfo.GetVersionInfo(webenginePath);
_sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0",
ver.FileMajorPart, ver.FileMinorPart, ver.FileBuildPart);
if (!EventLog.SourceExists(_sourceName)) {
throw new Exception(String.Format(CultureInfo.InvariantCulture,
"There is no EventLog source named '{0}'. This module requires .NET Framework 2.0.",
_sourceName));
}
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);
_initialized = true;
}
}
}
}
public void Dispose() {
}
void OnUnhandledException(object o, UnhandledExceptionEventArgs e) {
// Let this occur one time for each AppDomain.
if (Interlocked.Exchange(ref _unhandledExceptionCount, 1) != 0)
return;
StringBuilder message = new StringBuilder("\r\n\r\nUnhandledException logged by UnhandledExceptionModule.dll:\r\n\r\nappId=");
string appId = (string) AppDomain.CurrentDomain.GetData(".appId");
if (appId != null) {
message.Append(appId);
}
Exception currentException = null;
for (currentException = (Exception)e.ExceptionObject; currentException != null; currentException = currentException.InnerException) {
message.AppendFormat("\r\n\r\ntype={0}\r\n\r\nmessage={1}\r\n\r\nstack=\r\n{2}\r\n\r\n",
currentException.GetType().FullName,
currentException.Message,
currentException.StackTrace);
}
EventLog Log = new EventLog();
Log.Source = _sourceName;
Log.WriteEntry(message.ToString(), EventLogEntryType.Error);
}
}
}
Guarde el archivo UnhandledExceptionModule.cs a la carpeta siguiente:
C:\Archivos de programa\Microsoft Visual Studio 8\VC
Abra el símbolo de Microsoft Visual Studio 2005.
Escriba sn.exe -k key.snk y, a continuación, presione ENTRAR.
Escriba csc/t: library /r:system.web.dll,system.dll /keyfile:key.snk UnhandledExceptionModule.cs y, a continuación, presione ENTRAR.
Tipo gacutil.exe /if UnhandledExceptionModule.dll , y, a continuación, presione ENTRAR.
Escriba ngen instalar UnhandledExceptionModule.dll y, a continuación, presione ENTRAR.
Tipo gacutil /l UnhandledExceptionModule , y presione ENTRAR para mostrar el nombre seguro para el archivo UnhandledExceptionModule .
9. Agregue el código siguiente al archivo Web.config de la aplicación basada en ASP.NET.
La directiva de excepción no controlada volver a cambiar el comportamiento predeterminado que se produce en .NET Framework 1.1 y en .NET Framework 1.0 a.
Nota No se recomienda que cambie el comportamiento predeterminado. Si pasa por alto las excepciones, la aplicación puede pérdida de recursos y abandonar bloqueos.
Para habilitar este comportamiento predeterminado, agregue el código siguiente al archivo Aspnet.config que se encuentra en la carpeta siguiente:
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 911816
(http://support.microsoft.com/kb/911816/en-us/
)
Proporcione sus comentarios acerca de esta información
¿Esta información le ayudó a resolver su problema?
Sí
No
No lo sé
¿La información era relevante?
Sí
No
¿Qué podemos hacer para mejorar esta información?
Para proteger su privacidad, no incluya información de contacto en los comentarios.
¡Muchas gracias! Sus comentarios nos ayudarán a mejorar los contenidos de soporte. Para más opciones de asistencia, visite la página de Ayuda y soporte técnico.