Utilizzo di CallContext

Grazie al contesto della chiamata viene fornito un insieme di proprietà trasportate con il percorso del codice di esecuzione. Le voci possono essere aggiunte all'istanza della classe CallContext mentre questa si sposta sul percorso del codice di esecuzione.

L'oggetto CallContext viene passato nell'implementazione di IMessage nella voce "__CallContext", di tipo LogicalCallContext, mentre scorre tra contesti e domini applicazione. I sink dei messaggi possono aggiungere e cercare voci alla voce __CallContext mentre attraversa la catena di sink dei messaggi.

Il contesto della chiamata è clonato al limite del dominio applicazione. Gli oggetti che espongono l'interfaccia ILogicalThreadAffinative vengono propagati all'esterno del dominio applicazione e aggiunti al thread del ricevente. Gli oggetti che non supportano questa interfaccia non saranno propagati all'esterno del dominio applicazione.

L'oggetto CallContext fornisce slot di dati per il percorso della chiamata. CallContext.SetData e CallContext.GetData possono essere utilizzati per gestire gli slot del contesto della chiamata nel codice dell'applicazione. Gli slot di dati sono univoci per percorso della chiamata, quindi lo stato non è condiviso nei percorsi della chiamata. Gli slot sono denominati e il nome è utilizzato per accedervi. Lo slot può essere liberato in modo esplicito tramite il nome.

Per un esempio di comunicazione remota con CallContext, vedere Esempio di comunicazione remota: CallContext.

Async e CallContext

Il metodo BeginInvoke passa CallContext al server. Quando si chiama EndInvoke, CallContext viene nuovamente unito al thread. Questa situazione include casi in cui BeginInvoke ed EndInvoke sono chiamati in modo sequenziale e in cui BeginInvoke viene chiamato su un thread ed EndInvoke su una funzione di callback.

Quando le voci di CallContext sono comuni a CallContext sul thread corrente e a CallContext fornito da EndInvoke, le voci di EndInvoke sovrascrivono quelle nell'oggetto CallContext sul thread.

Campi statici relativi al contesto

I campi static relativi al contesto forniscono campi che sono relativi al contesto. Ogni volta che si accede al campo static da un determinato contesto, il valore sarà relativo a tale contesto. Il campo non è condiviso tra più contesti. Se si accede al campo static in un altro contesto, esso conterrà un valore differente.

Per utilizzare i campi static relativi al contesto è sufficiente applicare l'attributo ContextStaticAttribute a un campo su un oggetto ContextBoundObject.

Vedere anche

CallContexts e comunicazione remota diretta | Comunicazione remota avanzata | Esempio di comunicazione remota: CallContext | CallContext