Partager via


Utilisation de CallContext

Le contexte d'appel fournit un ensemble de propriétés qui sont acheminées avec le chemin d'accès du code d'exécution. Des entrées peuvent être ajoutées à l'instance de la classe CallContext tandis qu'elle est acheminée le long du chemin d'accès du code d'exécution, et vice versa.

L'objet CallContext est passé dans l'implémentation de IMessage dans l'entrée « __CallContext » (de type LogicalCallContext) lors de son déplacement entre les contextes et les domaines d'application. Les récepteurs de message peuvent ajouter et vérifier les entrées dans __CallContext lors de son passage dans la chaîne de récepteurs de message.

Le contexte d'appel est cloné au niveau des limites du domaine d'application. Les objets qui exposent l'interface ILogicalThreadAffinative sont propagés en dehors du domaine d'application et ajoutés au thread du destinataire. Les objets ne prenant pas en charge cette interface ne sont pas propagés en dehors du domaine d'application.

CallContext fournit les emplacements de données pour le chemin d'appel. CallContext.SetData et CallContext.GetData peuvent être utilisés pour gérer les emplacements de contexte d'appel dans le code de l'application. Les emplacements de données sont uniques par chemin d'appel ; c'est-à-dire que l'état n'est pas partagé entre les chemins d'appel. Les emplacements sont nommés. Le nom est utilisé pour accéder à l'emplacement des données. L'emplacement peut être explicitement libéré à l'aide du nom.

Pour obtenir un exemple d'accès distant qui utilise CallContext, consultez Exemple d'accès distant : CallContext.

Async et CallContext

La méthode BeginInvoke passe CallContext au serveur. Lorsque la méthode EndInvoke est appelée, CallContext est de nouveau fusionné dans le thread. Cela comprend des cas où BeginInvoke et EndInvoke sont appelés séquentiellement et BeginInvoke est appelé sur un thread et EndInvoke est appelé sur une fonction de rappel.

Lorsque les entrées CallContext sont communes à la fois à CallContext sur le thread en cours et CallContext fourni par EndInvoke, les entrées à partir de EndInvoke substituent les entrées dans CallContext sur le thread.

Champs statiques relatifs au contexte

Les champs statiques relatifs au contexte fournissent les champs relatifs au contexte. Lorsque le champ statique est accessible à partir d'un contexte particulier, la valeur sera relative à ce contexte ; le champ n'est pas partagé entre les contextes. Si l'accès au champ statique s'effectue dans un contexte différent, le champ contiendra une valeur différente.

Pour utiliser des champs statiques relatifs au contexte, appliquez simplement l'attribut ContextStaticAttribute à un champ sur un objet ContextBoundObject.

Voir aussi

CallContexts et accès distant direct | Accès distant avancé | Exemple d'accès distant : CallContext | CallContext