¿Qué son los eventos 1309 de ASP.NET?

Nos suelen preguntar muy a menudo el significado de las advertencias de ASP.NET que aparecen en algunas ocasiones en el visor de eventos de aplicaciones con el event id 1309.

Estas advertencias tienen un aspecto parecido a este:

  • Log Name: Application
    Source: ASP.NET 4.0.30319.0
    Date: 12/04/2012 16:01:32
    Event ID: 1309
    Task Category: Web Event
    Level: Warning
    Keywords: Classic
    User: N/A
    Computer: ComputerName
    Description:
    Event code: 3005
    Event message: An unhandled exception has occurred.
    Event time: 12/04/2012 16:01:32
    Event time (UTC): 12/04/2012 14:01:32
    Event ID: 53711af9840bc9338d7b04f094488
    Event sequence: 9
    Event occurrence: 1
    Event detail code: 0
    Application information:
    Application domain: 578ec-12-129787124298775328
    Trust level: Full
    Application Virtual Path: /
    Application Path: …\ProxyThing\
    Machine name: ComputerName
    Process information:
    Process ID: 2700
    Process name: WebDev.WebServer40.exe
    Account name: UserName
    Exception information:
    Exception type: InvalidCastException
    Exception message: Unable to cast object of type 'WebProxyWrapper' to type 'System.Net.WebProxy'.
    at ProxyThing._Default.Page_Load(Object sender, EventArgs e) in …\ProxyThing\ProxyThing\Default.aspx.cs:line 24
    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
    at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
    at System.Web.UI.Control.OnLoad(EventArgs e)
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  • Request information:
    Request URL: https://localhost:49471/Default.aspx
    Request path: /Default.aspx
    User host address: ::1
    User:
    Is authenticated: False
    Authentication Type:
    Thread account name: UserName
    Thread information:
    Thread ID: 77
    Thread account name: UserName
    Is impersonating: False
    Stack trace: at ProxyThing._Default.Page_Load(Object sender, EventArgs e) in …\ProxyThing\Default.aspx.cs:line 24
    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
    at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
    at System.Web.UI.Control.OnLoad(EventArgs e)
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Estas advertencias son las excepciones no controladas que se ejecutan en las aplicaciones ASP.Net. Para poder entender esto debemos conocer un conocimiento básico de cómo funcionan las excepciones.

Las excepciones pueden clasificarse en dos tipos: First Chance y Second Chance.

Las excepciones First Chance se producen cada vez que se lanza una excepción, esté controlada o no. Si tienes un trozo de código encapsulado en un try/catch porque controlas la excepción, en el momento en el que se produzca una excepción, controlada o no por ese catch, se considera de tipo First Chance.

Las excepciones Second Chance son las que no son controladas por ningún medio (try/catch, debuggers…) y son las que terminan con la ejecución de la aplicación.

En las aplicaciones de escritorio, las excepciones Second Chance, terminan con la ejecución de la aplicación mostrando el mensaje de error correspondiente. En estos casos, el que se termine la aplicación no tiene un impacto crítico ya que la excepción ha anulado la sesión del único usuario.

En el caso de las aplicaciones Web, el que en una sesión de un usuario aparezca una excepción Second Chance y que finalice con la ejecución de los múltiples usuarios que pueda tener la aplicación, puede tener un impacto mucho más crítico. Por ello ASP.NET captura todas las excepciones Second Chance escribiendo la información como una Advertencia en el Visor de Applicaciones, esto evita que la aplicación finalice para todos los usuarios.

Ya que dentro del funcionamiento de una aplicación pueden existir varias excepciones de First Chance que están siendo controladas por diversos métodos (como el try/catch), las herramientas que capturan información no suelen capturar este tipo de excepciones por defecto, ya que podrían suponer una penalización innecesaria en el servicio.

Por lo tanto, ver esas advertencias están significando que tu aplicación tiene unas excepciones que no deberían existir, por lo que os recomendaría que analizaseis esas excepciones.  

Espero que os sirva de ayuda.

- José Ortega Gutiérrez