Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Em 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. Este processo é conhecido como ativação. Em 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 pool de objetos, um objeto é ativado sem ser criado do zero. Nesse caso, uma instância em execução é ativada dentro de um contexto. Ao longo da sua vida útil, pode ser repetidamente ativado em diferentes contextos.
O mecanismo básico é o mesmo em ambos os casos — um objeto está 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. COM+ tem que comparar o contexto do chamador com a configuração do componente chamado e, em seguida, decidir onde ativar o componente downstream e como inicializar suas propriedades de contexto.
Para descobrir a configuração do componente, COM+ procura-o no banco de dados de registro de classe COM+, que é otimizado para pesquisas em 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 dentro do contexto do chamador. Isso pode acontecer somente se o contexto do chamador satisfizer todos os requisitos de tempo de execução do novo objeto.
Quando o componente a jusante não pode ser ativado dentro do contexto do chamador, ele é ativado em seu próprio contexto em um apartamento apropriado. Quando isso ocorre, certas propriedades de contexto podem fluir de chamador para chamador. Por exemplo, se o chamador estiver associado a uma transação e o destinatário oferecer suporte a transações, o novo objeto obterá seu próprio contexto (para votar na transação, ele precisa ter seu próprio sinalizador consistente) e herdará o ID de transação e o ID de 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 Sincronização desabilitada, indicando a presença de uma transação ou de um domínio de sincronização, não desempenharão nenhum papel na ativação do componente. Essas propriedades são fundamentalmente ignoradas quando o contexto é fluído. Ou se um componente usar apenas a verificação de acesso no nível do processo, sua propriedade de contexto de segurança será 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, você pode querer que um objeto seja ativado apenas no contexto de seu chamador, ou seja, nunca seja ativado em seu próprio contexto. Por exemplo, talvez você queira controlar o comportamento do objeto quando ele é chamado através de um limite de contexto.
Você pode garantir que um objeto não possa ser ativado em seu próprio contexto selecionando a opção Must be activated in callers context na guia Activation da página Propriedades do componente, usando a ferramenta administrativa 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 suportar 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 suportar objetos COM que não usam serviços COM+.
Ativação de gancho
Ao implementar IObjectControl::Activate e IObjectControl::D eactivate, você pode conectar ativação e desativação para executar inicialização especial no novo contexto. Esses métodos são chamados por COM+ em determinados pontos do 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.
Tópicos relacionados