Update: CallContext-Objekte gehen beim Erstellen einer neuen Serviced Component verloren

Dieser Artikel wurde zuvor veröffentlicht unter D319177
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
319177 FIX: CallContext Objects Are Lost When You Create a New Serviced Component
Hinweis: Die Verwendung der hier aufgeführten Informationen sowie Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen.

Weitere Informationen zu den von Microsoft angebotenen Supportoptionen finden Sie unter folgender Internetadresse:
Problembeschreibung
Wenn Sie CallContext-Objekte setzen, bevor Sie eine Serviced Component in einer Client-Applikation instantiiert haben, können CallContext-Objekte möglicherweise verloren gehen, nachdem die entsprechende Objektinstanz erstellt wurde.
Ursache
Dieses Problem tritt auf, wenn Objekte, die Sie in den CallContext platzieren, von der Schnittstelle ILogicalThreadAffinative ableiten. Wenn Sie diese Objekte (unter Verwendung der Methode CallContext.SetData) in CallContext platzieren und anschließend eine Instanz eines ServicedComponent-Objekts erstellen, gibt die Methode CallContext.GetData für diese Objekte Null zurück.
Lösung
Installieren Sie das aktuellste Service Pack für Microsoft .NET Framework, um dieses Problem zu beheben. Weitere Informationen finden Sie in folgendem Artikel der Microsoft Knowledge Base:
318836 INFO: How to Obtain the Latest .NET Framework Service Pack

Abhilfe

Wenden Sie eine der folgenden Methoden an, um dieses Problem zu umgehen:
  • Leiten Sie diese Objekte nicht von ILogicalThreadAffinative ab, falls Sie CallContext-Objekte ausschließlich lokal für Ihre Anwendung benötigen.

    Hinweis: Diese Objekte werden vom Remotesystem nicht über Anwendungsdomänen hinweg übergeben.
  • Falls Sie Remoteserver mit ServicedComponent-Objekten einsetzen möchten und diese ServicedComponents den CallContext nutzen sollen, müssen Sie Ihre ServicedComponent-Objekte instantiieren, bevor Sie diese Objekten im CallContext platzieren.

    Falls Sie dies nicht kontrollieren können, können Sie die CallContext-Inhalte speichern, bevor Sie eine Instanz Ihrer ServicedComponent erstellen. Laden Sie die Inhalte anschließend wieder in den CallContext zurück.
Hinweis: In ServicedComponent-Anwendungen können die Vorteile des Features CallContext nicht nutzen. Microsoft unterstützt die Nutzung von CallContext aus ServicedComponent-Objekten nicht.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt. Dieses Problem wurde erstmals in Microsoft .NET Framework Service Pack 2 (SP2) korrigiert.
Weitere Informationen
Das Objekt CallContext ermöglicht Ihnen das Senden von Informationen vom Client zum Server oder umgekehrt. CallContext stellt unterschiedliche Eigenschaften zur Verfügung, die mit über den Codepfad (call chain) übermittelt werden.

Dieses Problem kann auch bei allen Headern des Objekts CallContext auftreten.

Schritte zum Reproduzieren des Problems

  1. Definieren Sie Instanzen einer Klasse, um diese in CallContext einzufügen:
    [Serializable]public class CtxObject : ILogicalThreadAffinative{	public string CtxString;	public CtxObject(){CtxString = "Some String" ;}}
  2. Setzen Sie eines dieser Objekte in einen Datenumsetzungsplatz von CallContext, erstellen Sie anschließend eine Instanz einer ServicedComponent:
    // Create CallContext object.CtxObject CtxObj = new CtxObject () ;                     // Set it in the CallContext.CallContext.SetData ("CtxObject", CtxObj) ;// Create the serviced component.MyServicedComponent MyObj = new MyServicedComponent () ;  // Retrieve the CallContext object (returns null).CtxObject CtxObj1 = (CtxObject) CallContext.GetData ("CtxObject") ;  


Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
instantiieren
Eigenschaften

Artikelnummer: 319177 – Letzte Überarbeitung: 01/17/2015 16:36:52 – Revision: 3.0

  • Microsoft .NET Framework-Klassenbibliotheken 1.1
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework Service Pack 2
  • kbnosurvey kbarchive kbbug kbfix kbremoting kbnetframe100sp2fix KB319177
Feedback