Compartilhar via


Contextos COM+

Para componentes configurados executados em aplicativos COM+, os contextos são a base sobre a qual os serviços COM+ são fornecidos . Em COM+, um contexto é definido como um conjunto de propriedades de tempo de execução associadas a um ou mais objetos COM usados para fornecer serviços para esses objetos.

Em COM+, cada objeto COM é associado a precisamente um contexto enquanto é executado (isto é, entre sua ativação e desativação), e cada contexto reside precisamente em um apartamento COM. Vários objetos podem ser executados dentro do mesmo contexto, e vários contextos podem residir dentro do mesmo apartamento. Inicializadas quando um objeto é ativado, as propriedades de contexto, como as propriedades de contexto de segurança, representam as necessidades de tempo de execução de um objeto.

Observação

Para componentes não configurados que não usam serviços COM+, o contexto é, na maioria das vezes, ignorado.

 

COM+ usa propriedades de contexto como base para fornecer serviços de tempo de execução. Essas propriedades mantêm o estado que determina como o ambiente de execução executa serviços para objetos dentro do contexto. Em alguns casos, você pode interagir diretamente com as propriedades de contexto de um objeto para indicar algum estado relevante para um serviço que está sendo fornecido para o objeto. Por exemplo, você faria isso quando um objeto que está participando de uma transação automática vota no resultado da transação.

Para obter uma discussão detalhada da base COM desses conceitos, consulte Processos, threads e apartamentos.

Interação programática com propriedades de contexto

Cada contexto tem um objeto ObjectContext associado que controla suas propriedades. Você pode acessar ObjectContext chamando a função GetObjectContext. Depois de acessar ObjectContext, você pode chamar métodos na interface IObjectContext que ele expõe para manipular propriedades de contexto.

Por exemplo, chamar IObjectContext::SetComplete tem o efeito de definir o bit de consistência da transação como "consistente" e o bit de ativação JIT feito como "concluído" no contexto associado ao objeto. "Consistente" sinaliza para COM+ que você vota para confirmar a transação e "concluído" indica que seu objeto está pronto para ser desativado quando o método retornar.

Além de IObjectContext, outras interfaces especializadas que fornecem acesso a propriedades de contexto são IObjectContextInfo, IContextState e IObjectContextActivity. Até certo ponto, ISecurityCallContext também acessa propriedades de contexto. Você pode usar IGetSecurityCallContext::GetSecurityCallContext para obter ISecurityCallContext.

Noções básicas sobre ativação e interceptação

Geralmente, você precisa pensar no contexto apenas na medida em que ele representa um número de propriedades, algumas das quais você pode definir ou obter, que são usadas para fornecer serviços COM+ para seus componentes. Em algumas circunstâncias, no entanto, talvez seja necessário considerar as duas facetas inter-relacionadas de contextos a seguir com mais detalhes:

  • Ativação de contexto ou a inicialização de um objeto em um contexto apropriado.
  • Interceptação, ou o que o COM+ faz em chamadas através de um limite de contexto.

Relação com MTS Context Wrappers

Os contextos substituem efetivamente os wrappers de contexto MTS. O propósito que eles serviam — fornecer serviços automáticos interceptando solicitações de criação — agora é um recurso integrado do COM+. Como resultado, você não precisa mais usar a função SafeRef . No MTS, SafeRef foi usado para obter uma referência ao seu objeto que poderia ser passada fora de seu wrapper de contexto. No COM+, isso é desnecessário; As referências de objeto normal (ponteiros deste tipo) funcionam.