CORRECTIF : références aux objets STA stockées dans l'état de session peuvent S'endommagées si il sont appelés à partir d'un événement Session_End

Traductions disponibles Traductions disponibles
Numéro d'article: 827164 - Voir les produits auxquels s'applique cet article
Avertissement
Pour une version de Microsoft .NET Framework 1.0 de cet article, voir 827163.
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Symptômes

Si vous stockez vos références aux objets STA (single-threaded apartment dans l'état de session, et vous définir l'attribut AspCompat sur true , les références peuvent devenir endommagés ou peuvent devenir perdues lorsque vous tentez d'accéder aux objets de l'événement Session_End .

note En règle générale, ce problème peut se produire si vous exécutez l'application sous une charge élevée ou si vous utilisez un outil de stress comme Application Center Test (ACT) lorsque vous exécutez l'application. Lorsque ce problème se produit, vous recevez un « 0x8004e005 erreur " message d'erreur dans le event log.

Cause

Le problème se produit parce que l'événement Session_End n'a pas à exécuter sur le même thread que la session a été créée sur. Car l'objet STA n'est plus sur le même thread que la session a été créée sur, regroupement est nécessaire pour accéder à l'objet. Ce comportement provoque un ralentissement des performances.

Vous pouvez stocker des objets STA dans l'état de session. Toutefois, Microsoft ne recommande pas faire. Pour plus d'informations, reportez-vous à la section "Références" de cet article.

Résolution

Ce correctif logiciel ajoute un nouveau paramètre de configuration dans le fichier machine.config. Après avoir installé le correctif, la configuration d'application suivant est disponible.
<httpRuntime apartmentThreading=?true|false? />,
Par défaut, apartmentThreading est définie sur false . Si vous affectez apartmentThreading à cette propriété a la valeur true , le comportement suivant se produit :
  • Tous les événements Session_Start exécuté sur les threads STA qui correspondent pour l'ID de session, indépendamment de la page cible ou le gestionnaire.
  • Tous les événements Session_End s'exécutent sur les threads STA qui correspondent à l'ID de session.
  • AspCompat est définie sur true pour toutes les pages, sauf pour les pages qui ont AspCompat définissez explicitement à la valeur false .
note Vous pouvez toujours exécuter l'événement Session_Start sur le thread STA après avoir appliqué ce correctif si apartmentThreading est définie sur false et AspCompat est définie sur true pour la page cible.

Ce correctif fonctionne avec les objets STA qui sont stockés directement dans l'état de session. Ce correctif fonctionne également pour un objet STA qui est imbriqué un niveau niveaux comme un objet .NET qui est stockée dans l'état de session et qui contient une référence à un objet STA. Toutefois, ce correctif ne fonctionne pas des objets STA qui sont stockées à plusieurs niveaux de profondeur.

important Ce correctif contient deux types de packages : un package Microsoft Windows Installer et un package Gestionnaire de composants optionnels (OCM). Si vous utilisez Microsoft Windows Server 2003, vous devez spécifier que vous avez besoin la mise à jour de Windows Server 2003 (OCM), car la protection des fichiers Windows Server 2003 surveille les fichiers de .NET Framework 1.1. Si vous utilisez un système d'exploitation autres que Windows Server 2003, vous devez continuer à utiliser le package Windows Installer.

La version OCM de ce correctif est disponible dans les langues suivantes :
  • Anglais (ENU)
  • Japonais (JPN)
  • Allemand (DEU)
  • Français (FRN)
Un correctif est désormais disponible auprès de Microsoft, mais il ne vise qu'à corriger le problème décrit dans cet article. Uniquement l'appliquer à des systèmes rencontrant ce problème spécifique. Ce correctif peut subir des tests supplémentaires. Par conséquent, si vous n'êtes pas gravement touché par ce problème, nous vous recommandons d'attendre le prochain service pack Microsoft .NET Framework 1.1 qui comprendra ce correctif.

Pour résoudre ce problème immédiatement, contactez services de support technique Microsoft afin d'obtenir le correctif logiciel. Pour une liste complète des numéros de téléphone des services de support technique Microsoft et des informations sur les frais de support technique, reportez-vous au site de Web Microsoft suivant :
http://support.microsoft.com/contactus/?ws=support
note Dans certains cas, les frais aucuns de support peuvent être facturés si un technicien du support technique Microsoft détermine qu'une mise à jour spécifique peut résoudre votre problème. Les coûts habituels du support technique s'appliqueront aux autres questions et problèmes non traités par la mise à jour en question.

La version anglaise de ce correctif dispose des attributs de fichier (ou version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont exprimées en coordinated universal temps (UTC). Lorsque vous affichez les informations de fichier, il est convertie en heure locale. Pour connaître le décalage entre l'heure UTC et l'heure locale, utilisez l'onglet Fuseau horaire dans l'outil Date et heure du Panneau de configuration.
   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

Statut

Microsoft a confirmé qu'il s'agit d'un problème les produits Microsoft répertoriés au début de cet article produits.

Plus d'informations

Ce correctif logiciel inclut également un correctif secondaire. Si vous définissez AspCompat sur Cette propriété a la valeur true et que vous définir un objet STA est stocké dans l'état de session à null , vous pouvez recevoir un message d'erreur "NullReferenceException" lorsque vous rechargez la page. Pour reproduire le problème secondaire, collez le code suivant à l'intérieur d'un événement Page_Load .
	Session["obj"] = new Object();

	Session["obj"] = null;
lorsque vous accédez à cette page la première fois, le code s'exécute correctement. Toutefois, si vous rechargez la page, vous recevez un message d'erreur "NullReferenceException" de Microsoft ASP.NET et vous ne pouvez pas afficher la page à nouveau dans la session active.

Trace de pile :
[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
System.Web.UnsafeNativeMethods.AspCompatOnPageStart (objet obj) + 0 System.Web.Util.AspCompatApplicationStep.OnPageStartSessionObjects() +90 System.Web.UI.Page.ProcessRequestMain() +44 si vous configurez AspCompat sur false , ce problème ne se produit pas.

Procédure pour reproduire le comportement

Pour reproduire le problème qui apparaît dans la section « Symptômes » de cet article, procédez comme suit :
  1. Utilisez Microsoft Visual Basic .NET pour créer un objet fichier DLL ActiveX Visual Basic.

    note Si vous activez le composant en tant Mode d'exécution autonome (UE), l'erreur se produit toujours.
  2. Créez deux fonctions dans la classe DLL :
    1. Créer une fonction qui renvoie une chaîne.
    2. Créer une fonction qui accepte un paramètre long et qui renvoie une valeur LONG. Cette fonction effectue une boucle qui ajoute des numéros de 1 au nombre qui est transmis à la fonction.
  3. Créez un nouveau projet d'application Web comporte deux pages .aspx (Page1.aspx et Page2.aspx).
  4. Dans le fichier global.asax de l'événement Session_Start , utiliser CreateObject pour créer une instance de l'objet que vous avez créée à étape 1.
  5. Dans l'événement Page_Load de Page1.aspx, appelez une des fonctions que vous avez créé à l'étape 2 de l'objet qui est stockée dans l'état de session.
  6. Créer un lien hypertexte vers Page2.aspx dans Page1.aspx.
  7. Dans l'événement Page_Load de Page2.aspx, appelez la méthode Session.Abandon .
  8. Application Center Test (ACT) permet de créer un test qui enregistre l'opération de l'affichage des Page1.aspx et puis Page2.aspx.
  9. Exécuter le test avec des utilisateurs dix. Voir si l'erreur 0x8004e005 apparaît dans l'événement Viewer.

    note Vous devrez peut-être augmenter le nombre d'utilisateurs pour reproduire le problème.

Références

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
243543 INFO : faire pas banque STA objets dans la session ou une application
243815 MODÈLE : stockage composant COM STA dans la session colonneVerrouille session vers le bas à thread unique
817005 CORRECTIF : grave problèmes de performances lorsque vous lier l'état de session à des threads en mode ASPCompat

Propriétés

Numéro d'article: 827164 - Dernière mise à jour: mercredi 26 février 2014 - Version: 1.7
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework 1.1
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Éducation
  • Microsoft ASP.NET 1.1
Mots-clés : 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kberrmsg kbnetframe100presp3fix kbfix kbqfe kbcode kbbug KB827164 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 827164
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

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