Update: Verweisen auf STA-Objekte im Sitzungszustand gespeicherten werden können Wenn Sie aus einem Session_End-Ereignis aufgerufen werden beschädigt werden

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

827164
Hinweis
Ein Microsoft .NET Framework 1.0-Version dieses Artikels finden Sie unter 827163.
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Problembeschreibung
Wenn Sie die Verweise auf Singlethread-Apartment (STA) Objekte im Sitzungsstatus speichern, und Sie das AspCompat -Attribut auf true festlegen, werden die Verweise können beschädigt werden oder möglicherweise unterbrochen werden, wenn Sie versuchen, auf die Objekte aus dem Session_End -Ereignis zuzugreifen.

Hinweis: In der Regel kann dieses Problem auftreten, wenn der Anwendung bei hoher Auslastung ausführen oder wenn Sie ein Stress-Tool z. B. Application Center Test (ACT) beim Ausführen der Anwendung verwenden. Wenn dieses Problem auftritt, erhalten Sie eine "0x8004e005 Fehler" in der Event log Fehlermeldung.
Ursache
Das Problem rührt das Session_End -Ereignis keinen auf demselben Thread ausgeführt, der auf die Sitzung erstellt wurde. Da das STA-Objekt nicht mehr auf dem gleichen Thread, der ist auf die Sitzung erstellt wurde, wird Marshalling erforderlich, um auf das Objekt zugreifen. Dieses Verhalten führt zu Leistungseinbußen.

Sie können STA-Objekte im Sitzungsstatus speichern. Microsoft empfiehlt jedoch nicht, dass Sie dies tun. Weitere Informationen finden Sie unter im Abschnitt "Informationsquellen" dieses Artikels.
Lösung
Dieser Hotfix Fügt eine neue Konfigurationseinstellung der Datei Machine.config hinzu. Nachdem Sie den Hotfix installiert haben, die folgende Anwendungskonfiguration verfügbar ist.
<httpRuntime apartmentThreading=”true|false” />,
ApartmentThreading standardmäßig auf false festgelegt ist. Wenn Sie ApartmentThreading auf true festlegen, tritt das folgende Verhalten auf:
  • Alle Session_Start Ereignisse führen Sie auf STA-Threads, die entsprechen, um die Sitzungs-ID unabhängig von der Zielseite oder der Handler.
  • Alle Session_End Ereignisse führen Sie auf STA-Threads, die entsprechen, um die Sitzungs-ID.
  • AspCompat wird auf true für alle Seiten außer für die Seiten festlegen, die AspCompat explizit auf false festgelegt haben.
Hinweis: Sie können weiterhin Session_Start -Ereignis auf dem STA-Thread ausführen, nachdem Sie diesen Hotfix angewendet, wenn ApartmentThreading auf false festgelegt ist und AspCompat auf true für die Zielseite festgelegt ist.

Dieser Hotfix funktioniert für STA-Objekte, die direkt im Sitzungszustand gespeichert werden. Dieser Hotfix funktioniert auch für ein STA-Objekt, das ist die z. B. ein .NET-Objekt eine Ebene tief verschachtelte im Sitzungszustand gespeichert wird sowie, enthält einen Verweis auf ein STA-Objekt. Dieser Hotfix funktioniert jedoch nicht, für STA-Objekte, die mehrere Ebenen tief gespeichert.

wichtig Dieser Hotfix enthält zwei Pakettypen: ein Microsoft Windows Installer-Paket und ein Paket Manager für optionale Komponenten (OCM). Wenn Sie Microsoft Windows Server 2003 verwenden, müssen Sie angeben, dass Sie das Update der Windows Server 2003 (OCM) benötigen, da Windows Server 2003-Dateischutz die .NET Framework 1.1-Dateien überwacht. Wenn Sie ein anderes Betriebssystem als Windows Server 2003 verwenden, müssen Sie weiterhin das Windows Installer-Paket verwenden.

Die OCM-Version dieses Hotfixes ist in den folgenden Sprachen verfügbar:
  • Englisch (DEU)
  • Japanisch (DEU)
  • Deutsch (DEU)
  • Französisch (FRN)
Ein Hotfix zur Behebung dieses Problems ist inzwischen bei Microsoft erhältlich; dieser Hotfix wurde jedoch ausschließlich zur Behebung des in diesem Artikel beschriebenen Problems entwickelt. Deshalb sollten Sie nur Systeme aktualisieren, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird unter Umständen zu einem späteren Zeitpunkt weiteren Tests unterzogen. Wenn Sie durch dieses Problem nicht schwerwiegend betroffen sind, empfiehlt Microsoft daher, auf das nächste Microsoft .NET Framework 1.1 Service Pack warten, das diesen Hotfix enthält wird.

Wenn Sie das Problem sofort beheben möchten, wenden Sie sich an Microsoft Product Support Services, um den Hotfix zu erhalten. Eine vollständige Liste mit Telefonnummern der Microsoft-Produktsupport und Informationen Supportkosten der folgenden Microsoft-Website: Hinweis: PLEASE DO NOT TRANSLATE and DELETE THIS PASSAGE. IT DOES NOT APPLY TO GERMANY.

Die englische Version dieses Hotfixes weist die in der nachstehenden Tabelle aufgelisteten Dateiattribute (oder höher) auf. Die Datums- und Uhrzeitangaben für diese Dateien werden in Coordinated Universal Time () angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools „ Datum und Uhrzeit in der Systemsteuerung.
   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
Status
Microsoft hat bestätigt, dass dies ein Problem in den Microsoft-Produkten ist, die im Abschnitt "Gilt für" dieses Artikels aufgeführt sind.
Weitere Informationen
Dieses Hotfix-Paket enthält auch einen sekundären Hotfix. Wenn Sie AspCompat auf true festlegen und festlegen, dass ein STA-Objekt, im Sitzungszustand zu null gespeichert ist, erhalten Sie ein "NullReferenceException" Fehlermeldung, wenn Sie die Seite neu laden. Fügen Sie zum Reproduzieren des zweiten Problems den folgenden Code in einem Page_Load -Ereignis.
	Session["obj"] = new Object();	Session["obj"] = null;
Wenn Sie diese Seite zum ersten Mal aufrufen, wird korrekt im Code ausgeführt. Jedoch Wenn Sie die Seite neu laden, Sie erhalten eine "NullReferenceException" Fehlermeldung von Microsoft ASP.NET, und Sie können nicht die Seite in der aktuellen Sitzung erneut anzeigen.

Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]System.Web.UnsafeNativeMethods.AspCompatOnPageStart(Object obj) +0System.Web.Util.AspCompatApplicationStep.OnPageStartSessionObjects() +90System.Web.UI.Page.ProcessRequestMain() +44
Wenn AspCompat auf false festgelegt ist, wird dieses Verhalten tritt nicht auf.

Schritte zum Reproduzieren des Verhaltens

Gehen Sie folgendermaßen vor um das Problem zu reproduzieren, das im Abschnitt "Problembeschreibung" dieses Artikels angezeigt wird:
  1. Verwenden Sie Microsoft Visual Basic .NET, um ein Visual Basic ActiveX DLL-Objekt zu erstellen.

    Hinweis: Wenn Sie die Komponente als Unbeaufsichtigte Ausführung (UE) kennzeichnen, tritt der Fehler weiterhin auf.
  2. Erstellen Sie zwei Funktionen in der DLL -Klasse:
    1. Erstellen Sie eine Funktion, die eine Zeichenfolge zurückgibt.
    2. Erstellt eine Funktion, die einen langen Parameter annimmt und, gibt einen LONG-Wert zurück. Diese Funktion führt eine Schleife, die Zahlen von 1 die Zahl hinzufügt, die an die Funktion übergeben wird.
  3. Erstellen eines neuen Webanwendung -Projekts, das zwei ASPX-Seiten (Page1.aspx und Page2.aspx) verfügt.
  4. Verwenden Sie in der Datei Global.asax des Ereignisses Session_Start CreateObject , um eine Instanz des Objekts erstellen, die Sie in Schritt 1 erstellt haben.
  5. Im Page_Load -Ereignis Page1.aspx zum rufen Sie entweder Funktionen, die Sie in Schritt 2 aus dem Objekt erstellt, die im Sitzungszustand gespeichert wird auf.
  6. Erstellen Sie einen Hyperlink zu Page2.aspx in Page1.aspx.
  7. Rufen Sie im Page_Load -Ereignis Page2.aspx die Session.Abandon -Methode auf.
  8. Verwenden Sie Application Center Test (ACT), um einen Test erstellen, der den Betrieb des anzeigen Page1.aspx und Page2.aspx dann anzeigen aufzeichnet.
  9. Führen Sie den Test mit zehn Benutzer. Sie, ob Fehler 0x8004e005 im Viewer angezeigt wird.

    Hinweis: Sie müssen möglicherweise die Anzahl der Benutzer zum Reproduzieren des Problems zu erhöhen.
Informationsquellen
Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
243543INFO: Speicherung STA-Objekte im Sitzungs- oder
243815PRB: Session unten zu einzelnen Thread Sperren STA COM-Komponente in Sitzung speichern
817005Update: Schwerwiegende Leistungsprobleme beim Binden von Sitzungsstatus zu Threads in ASPCompat Mode

Warning: This article has been translated automatically

Eigenschaften

Artikelnummer: 827164 – Letzte Überarbeitung: 02/26/2014 21:07:14 – Revision: 1.7

  • 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
  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kberrmsg kbnetframe100presp3fix kbfix kbqfe kbcode kbbug KB827164 KbMtde
Feedback