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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 827164 - Produkte anzeigen, auf die sich dieser Artikel bezieht
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.
Alles erweitern | Alles schließen

Auf dieser Seite

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:
http://support.microsoft.com/contactus/?ws=support
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) +0
System.Web.Util.AspCompatApplicationStep.OnPageStartSessionObjects() +90
System.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

Eigenschaften

Artikel-ID: 827164 - Geändert am: Mittwoch, 26. Februar 2014 - Version: 1.7
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kberrmsg kbnetframe100presp3fix kbfix kbqfe kbcode kbbug KB827164 KbMtde
Maschinell übersetzter Artikel
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.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 827164
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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