Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Aufrufkontext stellt eine Gruppe von Eigenschaften bereit, die über den Codeausführungspfad weitergegeben werden. Während die Instanz der CallContext-Klasse den Codeausführungspfad nach unten und zurück nach oben durchläuft, können Einträge hinzugefügt werden.
Das CallContext-Objekt wird während der Übertragung zwischen Kontexten und Anwendungsdomänen an die IMessage-Implementierung im "__CallContext"-Eintrag (vom Typ LogicalCallContext) übergeben. Nachrichtenempfänger können Einträge zum __CallContext hinzufügen und nach Einträgen suchen, während dieser die Nachrichtenempfängerkette durchläuft.
Der Aufrufkontext wird an der Anwendungsdomänengrenze geklont. Objekte, die die ILogicalThreadAffinative-Schnittstelle offen legen, werden außerhalb der Anwendungsdomäne verbreitet und dem Thread des Empfängers hinzugefügt. Objekte, die diese Schnittstelle nicht unterstützen, werden nicht außerhalb der Anwendungsdomäne verbreitet.
Der CallContext stellt Datenslots für den Aufrufpfad bereit. CallContext.SetData und CallContext.GetData können zum Verwalten der Aufrufkontextslots im Anwendungscode verwendet werden. Die Datenslots sind für jeden Aufrufpfad eindeutig, d. h., der Status gilt nicht für mehrere Aufrufpfade. Die Slots sind benannt. Der jeweilige Name wird für den Zugriff auf den Datenslot verwendet. Der Slot kann unter Verwendung des Namens explizit freigegeben werden.
Ein Remotingbeispiel, in dem CallContext verwendet wird, finden Sie unter Remotingbeispiel: CallContext.
Asynchrone Vorgänge und "CallContext"
Die BeginInvoke-Methode übergibt den CallContext an den Server. Beim Aufruf der EndInvoke-Methode wird CallContext wieder mit dem Thread zusammengeführt. Dies gilt auch in Fällen, in denen BeginInvoke und EndInvoke sequenziell aufgerufen werden oder in denen BeginInvoke für einen Thread und EndInvoke für eine Rückruffunktion aufgerufen wird.
Wenn der CallContext für den aktuellen Thread und der von EndInvoke bereitgestellte CallContext CallContext-Einträge gemeinsam haben, überschreiben die Einträge von EndInvoke die Einträge im CallContext für den Thread.
Kontextrelative statische Felder
Kontextrelative statische Felder stellen Felder bereit, die sich relativ zum Kontext verhalten. Wenn von einem bestimmten Kontext aus auf ein statisches Feld zugegriffen wird, verhält sich der entsprechende Wert relativ zum betreffenden Kontext. Das Feld wird also nicht von mehreren Kontexten gemeinsam genutzt. Wenn in einem anderen Kontext auf das statische Feld zugegriffen wird, enthält es einen anderen Wert.
Wenden Sie zum Einsatz kontextrelativer statischer Felder einfach das ContextStaticAttribute-Attribut auf ein Feld in einem ContextBoundObject-Objekt an.
Siehe auch
CallContexts und direktes Remoting | Erweitertes Remoting | Remotingbeispiel: CallContext | CallContext