Compartir a través de


Utilizar CallContext

El contexto de llamada proporciona un conjunto de propiedades que se incluyen en la ruta del código de ejecución. Se pueden agregar entradas a la instancia de la clase CallContext conforme recorre la ruta del código de ejecución.

El objeto CallContext se pasa en la implementación IMessage en la entrada "__CallContext" (de tipo LogicalCallContext) a medida que se desplaza de un contexto a otro y de un dominio de aplicación a otro. Los receptores de mensajes pueden agregar y mirar entradas en el __CallContext conforme pasa por la cadena de receptores de mensajes.

El contexto de llamada se duplica en los límites del dominio de aplicación. Los objetos que exponen la interfaz ILogicalThreadAffinative se propagan en el exterior del dominio de aplicación y se agregan al subproceso del receptor. Los objetos que no admiten esta interfaz no se propagan fuera del dominio de aplicación.

El CallContext proporciona ranuras de datos para la ruta de la llamada. Se puede utilizar CallContext.SetData y CallContext.GetData para administrar las ranuras del contexto de llamada en el código de la aplicación. Las ranuras de datos son exclusivas de cada ruta de llamada, es decir, el estado no se comparte entre las rutas de llamada. Las ranuras tienen nombre, que se utiliza para obtener acceso a la ranura de datos. La ranura se puede liberar explícitamente usando el nombre.

Para obtener un ejemplo de interacción remota en el que se usa CallContext, vea Ejemplo de interacción remota: CallContext.

Async y CallContext

El método BeginInvoke pasa el objeto CallContext al servidor. Cuando se llama al método EndInvoke, se vuelve a combinar CallContext con el subproceso. Esto se aplica también a casos en los que se llama primero a BeginInvoke y luego a EndInvoke, y en los que se llama a BeginInvoke en un subproceso y a EndInvoke en una función de devolución de llamada.

Cuando las entradas CallContext son comunes al CallContext del subproceso actual y al CallContext proporcionado por EndInvoke, las entradas del EndInvoke reemplazan a las del CallContext en el subproceso.

Campos estáticos relacionados con el contexto

Los campos estáticos relacionados con el contexto proporcionan campos relativos al contexto. Siempre que se obtiene acceso a un campo estático desde un contexto concreto, el valor se relacionará con ese contexto; el campo no se comparte entre varios contextos. Si se obtiene acceso al campo estático en otro contexto, dicho campo contendrá un valor diferente.

Para usar campos estáticos relacionados con el contexto, basta con aplicar el atributo ContextStaticAttribute a un campo del objeto ContextBoundObject.

Vea también

CallContexts e interacción remota directa | Interacción remota avanzada | Ejemplo de interacción remota: CallContext | CallContext