REVISIÓN: El referencias a objetos STA almacenadas en el estado de sesión pueden dañarse si se llama a partir de un evento Session_End

Seleccione idioma Seleccione idioma
Id. de artículo: 827164 - Ver los productos a los que se aplica este artículo
Aviso
Para obtener una versión de Microsoft .NET Framework 1.0 de este artículo, consulte 827163.
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Si almacena las referencias a objetos de apartamento de un único subproceso (STA) en el estado de sesión y se establece el atributo AspCompat en true , las referencias pueden están dañadas o pueden perderán cuando intenta tener acceso a los objetos desde el evento Session_End .

Nota Normalmente, este problema puede producirse si ejecuta la aplicación bajo cargas altas o si utiliza una herramienta de esfuerzo, como Application Center Test (ACT) cuando ejecuta la aplicación. Cuando se produce este problema, recibirá un "0x8004e005 error" mensaje de error en el event log.

Causa

El problema se produce porque no tiene el evento Session_End para ejecutarse en el mismo subproceso que creó la sesión en. Puesto que el objeto STA ya no es en el mismo subproceso que creó la sesión en, cálculo de referencias necesarios para tener acceso al objeto. Este comportamiento hace que un rendimiento lento.

Puede almacenar objetos STA en el estado de sesión. Sin embargo, Microsoft no recomienda que lo haga. Para obtener más información, consulte la sección "Referencias" de este artículo.

Solución

Este hotfix agrega una nueva configuración en el archivo Machine.config. Después de instalar la revisión, la siguiente configuración de aplicación está disponible.
<httpRuntime apartmentThreading=?true|false? />,
de forma predeterminada, apartmentThreading se establece en false . Si establece apartmentThreading en true , ocurre lo siguiente:
  • Todos los eventos Session_Start ejecutan en subprocesos STA que se corresponden con el identificador de sesión, independientemente de la página de destino o el controlador.
  • Todos los eventos Session_End ejecutan en subprocesos STA que corresponden al identificador de sesión.
  • AspCompat se establece en true para todas las páginas, excepto para las páginas que tienen AspCompat establezca explícitamente en false .
Nota Aunque puede ejecutar el evento Session_Start en el subproceso STA después de aplicar este hotfix si apartmentThreading se establece en false y AspCompat está establecida en true para la página de destino.

Esta revisión funciona para los objetos STA que se almacenan directamente en el estado de sesión. Esta revisión también funciona para un objeto STA que está anidado un nivel más profundo como un objeto .NET que se almacena en el estado de sesión y tiene una referencia a un objeto STA. Sin embargo, esta revisión no funciona para objetos STA que almacenan más de un nivel de profundidad.

importante Este hotfix contiene dos tipos de paquetes: un paquete de Microsoft Windows Installer y un paquete de administrador de componentes opcional (OCM). Si utiliza Microsoft Windows Server 2003, debe especificar que se requiere la actualización de Windows Server 2003 (OCM), porque la protección de archivos de Windows Server 2003 supervisa los archivos de .NET Framework 1.1. Si utiliza un sistema operativo distinto de Windows Server 2003, debe continuar utilizar el paquete Windows Installer.

La versión OCM de esta revisión está disponible en los siguientes idiomas:
  • Inglés (ENU)
  • Japonés (JPN)
  • Alemán (ALEMÁN)
  • Francés (FRN)
Ahora hay disponible un hotfix para el que Microsoft proporciona soporte técnico, pero que sólo se diseñó para corregir el problema descrito en este artículo. Aplíquelo sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere al próximo Microsoft .NET Framework 1.1 service pack que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

La versión en inglés de este hotfix tiene los atributos de archivo enumerados en la siguiente tabla u otros posteriores. Las fechas y horas de estos archivos aparecen en la hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
   Date         Time   Version       Size       File name
   ------------------------------------------------------------------------
   18-Sep-2003  05:18  1.1.4322.947    258,048  Aspnet_isapi.dll
   18-Sep-2003  05:18  1.1.4322.947     20,480  Aspnet_regiis.exe
   18-Sep-2003  05:18  1.1.4322.947     32,768  Aspnet_state.exe
   18-Sep-2003  05:18  1.1.4322.947     32,768  Aspnet_wp.exe
   16-May-2003  01:49                   33,522  Installpersistsqlstate.sql
   16-May-2003  01:49                   34,150  Installsqlstate.sql
   18-Sep-2003  05:09  1.1.4322.947     94,208  Perfcounter.dll
   19-Sep-2003  02:43  1.1.4322.947  1,216,512  System.dll
   19-Sep-2003  02:40  1.1.4322.947    323,584  System.runtime.remoting.dll
   19-Sep-2003  02:43  1.1.4322.947  1,253,376  System.web.dll
   19-Sep-2003  02:42  1.1.4322.947    819,200  System.web.mobile.dll
   19-Sep-2003  02:41  1.1.4322.947    569,344  System.web.services.dll
   19-Sep-2003  02:44  1.1.4322.947  1,335,296  System.xml.dll
   18-Sep-2003  05:13                   14,472  Webuivalidation.js

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a".

Más información

Este paquete de hotfix también incluye una revisión secundaria. Si establece AspCompat en true y establece un objeto STA que se almacena en estado de sesión en null , puede recibir un mensaje de error "NullReferenceException" cuando vuelva a cargar la página. Para reproducir el problema secundario, pegue el código siguiente dentro de un evento Page_Load .
	Session["obj"] = new Object();

	Session["obj"] = null;
al visitar esta página de la primera vez, el código se ejecuta correctamente. Sin embargo, si volver a cargar la página, recibirá un mensaje de error "NullReferenceException" de Microsoft ASP.NET y no se puede ver la página nuevo en la sesión actual.

Seguimiento de pila:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.UnsafeNativeMethods.AspCompatOnPageStart(Object obj) +0
System.Web.Util.AspCompatApplicationStep.OnPageStartSessionObjects() +90
System.Web.UI.Page.ProcessRequestMain() +44
si AspCompat se establece en false , no se produce este comportamiento.

Pasos para reproducir el comportamiento

Para reproducir el problema que aparece en la sección "Síntomas" de este artículo, siga estos pasos:
  1. Utilice Microsoft Visual Basic .NET para crear un objeto de DLL ActiveX de Visual Basic.

    Nota Si el componente se marca como Ejecución desatendida (UE), el error persiste.
  2. Cree dos funciones en la clase DLL :
    1. Crear una función que devuelve una cadena.
    2. Crear una función que toma un parámetro largo y devuelve un valor LONG. Esta función realiza un bucle que suma los números desde 1 al número que se pasa a la función.
  3. Cree un nuevo proyecto de Aplicación Web que tiene dos páginas .aspx (Page1.aspx y Page2.aspx).
  4. En el archivo global.asax del evento Session_Start , utilizar CreateObject para crear una instancia del objeto que creó en el paso 1.
  5. En el evento Page_Load de Page1.aspx, llame al cualquiera de las funciones que creó en el paso 2 desde el objeto que se almacena en estado de sesión.
  6. Crear un hipervínculo a Page2.aspx en Page1.aspx.
  7. En el evento Page_Load de Page2.aspx, llame al método Session.Abandon .
  8. Utilizar Application Center Test (ACT) para crear una prueba que registra la operación de ver Page1.aspx y, a continuación, ver Page2.aspx.
  9. Ejecute la prueba con diez usuarios. Vea si el error 0x8004e005 aparece en el Visor de sucesos.

    Nota Quizás tenga que aumentar el número de usuarios para reproducir el problema.

Referencias

Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
243543INFORMACIÓN: Hace objetos STA de almacenamiento en Session o Application
243815PRB: Almacenar componentes de COM STA en sesión bloquea sesión abajo para Single Thread
817005REVISIÓN: Problemas de rendimiento grave al que enlazar el estado de sesión a subprocesos en el modo ASPCompat

Propiedades

Id. de artículo: 827164 - Última revisión: jueves, 27 de febrero de 2014 - Versión: 1.7
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.1
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft ASP.NET 1.1
Palabras clave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kberrmsg kbnetframe100presp3fix kbfix kbqfe kbcode kbbug KB827164 KbMtes
Traducción automática
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): 827164

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com