Compartir a través de


Activación de contexto

En COM+, cada objeto COM se crea con un contexto asociado. Esto significa que se debe crear e inicializar un nuevo contexto o se usa un contexto existente adecuado. Este proceso se conoce como activación. En COM+, un objeto se activa en su propio contexto o en el de su creador (un objeto que ha solicitado que se active el objeto, por ejemplo, llamando a CoCreateInstance).

En algunas circunstancias, como con la agrupación de objetos, se activa un objeto sin crearse desde cero. En este caso, se activa una instancia en ejecución dentro de un contexto. A lo largo de su duración, puede activarse repetidamente en distintos contextos.

El mecanismo básico es el mismo en cualquier caso: un objeto está asociado a un contexto y ese contexto se inicializa correctamente para representar las necesidades en tiempo de ejecución del objeto.

Flujo de propiedades de contexto

Cuando se activa un objeto en respuesta a una solicitud de creación de otro objeto, COM+ debe mediar entre ellos para activar correctamente el objeto de bajada. COM+ tiene que comparar el contexto del autor de la llamada con la configuración del componente llamado y, a continuación, decidir dónde activar el componente de bajada y cómo inicializar sus propiedades de contexto.

Para detectar la configuración del componente, COM+ lo busca en la base de datos de registro de clases COM+, que está optimizada para búsquedas en tiempo de ejecución extremadamente rápidas. (Esto viene determinado por cómo configuró un componente al instalarlo en una aplicación COM+). A continuación, la configuración del componente se examina con respecto al estado de las propiedades de contexto del autor de la llamada.

En algunos casos, la configuración es coherente con el contexto del autor de la llamada y el componente se puede activar dentro del contexto del autor de la llamada. Esto solo puede ocurrir si el contexto del autor de la llamada cumple todos los requisitos en tiempo de ejecución del nuevo objeto.

Cuando el componente de bajada no se puede activar dentro del contexto del autor de la llamada, se activa en su propio contexto en un apartamento adecuado. Cuando esto ocurre, ciertas propiedades de contexto pueden fluir de llamador a destinatario. Por ejemplo, si el autor de la llamada está asociado a una transacción y el destinatario admite transacciones, el nuevo objeto obtiene su propio contexto (para votar en la transacción, debe tener su propia marca coherente) y hereda el identificador de transacción y el identificador de actividad del autor de la llamada (que residen en el mismo dominio de transacción y sincronización).

Propiedades de contexto ignoradas

En función de cómo se configure un componente, algunas propiedades de contexto pueden no desempeñar ningún papel para determinar si se activan en el contexto del creador o en su propio contexto. Por ejemplo, la configuración Transacciones deshabilitadas y deshabilitadas de sincronización, que indica la presencia de una transacción o un dominio de sincronización, no desempeñará ningún rol en la activación del componente. Estas propiedades se omiten fundamentalmente cuando se fluye el contexto. O bien, si un componente usa solo la comprobación de acceso de nivel de proceso, se omite su propiedad de contexto de seguridad, la configuración de seguridad del componente nunca desempeñará un papel en su activación.

Forzar la activación en el contexto del autor de la llamada

En algunas circunstancias, es posible que desee que un objeto se active solo en el contexto del autor de la llamada, es decir, nunca se active en su propio contexto. Por ejemplo, es posible que desee controlar el comportamiento del objeto cuando se llama a través de un límite de contexto.

Para asegurarse de que un objeto no se puede activar en su propio contexto, seleccione la opción Debe activarse en el contexto de los autores de llamadas en la pestaña Activación de la página Propiedades del componente, mediante la herramienta administrativa Servicios de componentes. (Consulte Aplicación de la activación en el contexto del autor de la llamada para obtener instrucciones paso a paso). Al seleccionar esta opción, si el objeto no se puede activar en el contexto del autor de la llamada, Se produce un error en CoCreateInstance y se devuelve CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.

Contexto predeterminado

Existen contextos predeterminados para admitir componentes no configurados, es decir, componentes COM no instalados en aplicaciones COM+ y no registrados en la base de datos de registro de clases COM+. Si los componentes no configurados tienen un modelo de subprocesos compatible, se activan en el contexto del autor de la llamada. De lo contrario, se activan en un contexto predeterminado en el apartamento adecuado. Cada apartamento tiene un contexto predeterminado para admitir objetos COM que no usan servicios COM+.

Activación de enlace

Al implementar IObjectControl::Activate e IObjectControl::D eactivate, puede enlazar la activación y desactivación conjuntamente para realizar una inicialización especial en el nuevo contexto. Com+ llama a estos métodos en determinados puntos del ciclo de vida de un objeto, cuando el objeto está configurado para usar la activación JIT o la agrupación de objetos. Consulte Activación Just-In-Time de COM+ y Agrupación de objetos COM+ para obtener más detalles.

Interceptación de llamadas entre contextos