Compartilhar via


Ativação de contexto

No COM+, cada objeto COM é criado com um contexto associado. Isso significa que um novo contexto deve ser criado e inicializado ou um contexto existente apropriado é usado. Esse processo é conhecido como de ativação. No COM+, um objeto é ativado em seu próprio contexto ou no de seu criador (um objeto que solicitou que o objeto fosse ativado, por exemplo, chamando CoCreateInstance).

Em algumas circunstâncias, como com de pool de objetos, um objeto é ativado sem ser criado do zero. Nesse caso, uma instância em execução é ativada em um contexto. Ao longo de seu tempo de vida, ele pode ser ativado repetidamente em contextos diferentes.

O mecanismo básico é o mesmo em ambos os casos— um objeto é associado a um contexto e esse contexto é inicializado corretamente para representar as necessidades de tempo de execução do objeto.

Fluxo de propriedades de contexto

Quando um objeto está sendo ativado em resposta a uma solicitação de criação de outro objeto, COM+ precisa mediar entre eles para ativar corretamente o objeto downstream. O COM+ precisa comparar o contexto do chamador com a configuração do componente chamado e decidir onde ativar o componente downstream e como inicializar suas propriedades de contexto.

Para descobrir a configuração do componente, o COM+ o pesquisa no banco de dados de registro de classe COM+, que é otimizado para pesquisas de tempo de execução extremamente rápidas. (Isso é determinado pela forma como você configurou um componente ao instalá-lo em um aplicativo COM+.) A configuração do componente é então examinada em relação ao estado das propriedades de contexto do chamador.

Em alguns casos, a configuração é consistente com o contexto do chamador e o componente pode ser ativado no contexto do chamador. Isso só poderá acontecer se o contexto do chamador atender a todos os requisitos de tempo de execução do novo objeto.

Quando o componente downstream não pode ser ativado dentro do contexto do chamador, ele é ativado em seu próprio contexto em um apartamento apropriado. Quando isso ocorre, determinadas propriedades de contexto podem fluir de chamador para destinatário. Por exemplo, se o chamador estiver associado a uma transação e o chamador der suporte a transações, o novo objeto obterá seu próprio contexto (para votar na transação, ele precisará ter seu próprio sinalizador consistente) e herdará a ID da transação e a ID da atividade do chamador (que residem no mesmo domínio de transação e sincronização).

Propriedades de contexto ignoradas

Dependendo de como um componente é configurado, algumas propriedades de contexto podem não desempenhar nenhum papel na determinação se ele é ativado no contexto do criador ou em seu próprio contexto. Por exemplo, as configurações transações desabilitadas e desabilitadas, indicando a presença de uma transação ou um domínio de sincronização, não desempenharão nenhuma função na ativação do componente. Essas propriedades são fundamentalmente ignoradas quando o contexto é fluido. Ou se um componente usa apenas a verificação de acesso em nível de processo, sua propriedade de contexto de segurança é ignorada– a configuração de segurança do componente nunca desempenhará um papel em sua ativação.

Forçando a ativação no contexto do chamador

Em algumas circunstâncias, talvez você queira que um objeto seja ativado apenas no contexto do chamador, ou seja, nunca ativado em seu próprio contexto. Por exemplo, talvez você queira controlar o comportamento do objeto quando ele é chamado em um limite de contexto.

Você pode garantir que um objeto não possa ser ativado em seu próprio contexto selecionando o Deve ser ativado no contexto de chamadores opção na guia de Ativação do componente página Propriedades, usando a ferramenta administrativa dos Serviços de Componentes. (Consulte Impondo a Ativação no de Contexto do Chamador para obter instruções passo a passo.) Quando você seleciona essa opção, se o objeto não puder ser ativado no contexto do chamador, CoCreateInstance falhar, retornando CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.

Contexto Padrão

Existem contextos padrão para dar suporte a componentes não configurados, ou seja, componentes COM não instalados em aplicativos COM+ e não registrados no banco de dados de registro de classe COM+. Se os componentes não configurados tiverem um modelo de threading compatível, eles serão ativados no contexto do chamador. Caso contrário, eles são ativados em um contexto padrão no apartamento apropriado. Cada apartamento tem um contexto padrão para dar suporte a objetos COM que não usam serviços COM+.

Ativação de conexão

Implementando IObjectControl::Activate and IObjectControl::D eactivate, você pode conectar a ativação e a desativação para executar inicialização especial no novo contexto. Esses métodos são chamados por COM+ em determinados pontos no ciclo de vida de um objeto, quando o objeto é configurado para usar a ativação JIT ou o pool de objetos. Consulte de ativação just-in-time com+ e de pool de objetos COM+, para obter mais detalhes.

interceptação de chamadas entre contextos