Verwenden von "CallContext"
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. Nachrichtensenken können Einträge zu __CallContext hinzufügen und nach Einträgen suchen, während die Nachrichtensenkenkette durchlaufen wird.
Der Aufrufkontext wird an der Anwendungsdomänengrenze geklont. Objekte, die die ILogicalThreadAffinative-Schnittstelle verfügbar machen, werden außerhalb der Anwendungsdomäne übertragen und dem Thread des Empfängers hinzugefügt. Objekte, die diese Schnittstelle nicht unterstützen, werden nicht außerhalb der Anwendungsdomäne übertragen.
CallContext stellt Datenumsetzungsplätze für den Aufrufpfad bereit. CallContext.SetData und CallContext.GetData können zum Verwalten der Umsetzungsplätze für Aufrufkontexte im Anwendungscode verwendet werden. Die Datenumsetzungsplätze sind für jeden Aufrufpfad eindeutig, d. h., der Status gilt nicht für mehrere Aufrufpfade. Die Umsetzungsplätze sind benannt. Der jeweilige Name wird für den Zugriff auf den Datenumsetzungsplatz verwendet. Der Umsetzungsplatz 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 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 werden.
Wenn die CallContext-Einträge für CallContext des aktuellen Threads und des von EndInvoke bereitgestellten CallContext-Objekts identisch sind, setzen die Einträge von EndInvoke die Einträge in CallContext für den Thread außer Kraft.
Kontextbezogene statische Felder
Kontextbezogene 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.
Um kontextbezogene statische Felder zu verwenden, wenden Sie einfach das ContextStaticAttribute-Attribut auf ein Feld in einem ContextBoundObject-Objekt an.