Contextos COM+
Para componentes configurados em execução em aplicativos COM+, contextos são a base na qual os serviços COM+ são fornecidos. No COM+, um contexto é definido como um conjunto de propriedades de tempo de execução associadas a um ou mais objetos COM que são usados para fornecer serviços para esses objetos.
No COM+, cada objeto COM é associado precisamente a um contexto à medida que é executado (ou seja, entre sua ativação e desativação) e cada contexto reside precisamente em um apartamento COM. Vários objetos podem ser executados no mesmo contexto e vários contextos podem residir no mesmo apartamento. Inicializado quando um objeto é ativado, as propriedades de contexto, como propriedades de contexto de segurança, representam as necessidades de tempo de execução de um objeto.
Nota
Para componentes não configurados que não usam serviços COM+, o contexto é, em sua maioria, ignorado.
O COM+ usa propriedades de contexto como base para fornecer serviços em tempo de execução. Essas propriedades contêm um 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 votasse no resultado da transação.
Para obter uma discussão detalhada sobre a 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 mantém o controle de suas propriedades. Você pode acessar ObjectContext chamando a função GetObjectContext. Depois de acessar ObjectContext, você pode chamar métodos na interfaceIObjectContext que ela 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 JIT-activation bit feito para "concluído" no contexto associado ao objeto. Sinais "consistentes" 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 retorna.
Além de IObjectContext, outras interfaces especializadas que fornecem acesso a propriedades de contexto são IObjectContextInfo, IContextStatee IObjectContextActivity. Em certa medida, ISecurityCallContext também acessa as propriedades de contexto. Você pode usar IGetSecurityCallContext::GetSecurityCallContext para obter ISecurityCallContext.
Noções básicas sobre ativação e interceptação
Em geral, você precisa pensar no contexto apenas na medida em que ele representa várias 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 interrelacionadas de contextos com mais detalhes:
- de ativação de contexto ou a inicialização de um objeto em um contexto apropriado.
- de Interceptação ou o que o COM+ faz em chamadas em um limite de contexto.
Relação com wrappers de contexto mts
Os contextos substituem efetivamente os wrappers de contexto do MTS. A finalidade que eles serviram, fornecendo 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çãoSafeRef. No MTS, SafeRef foi usado para obter uma referência ao seu objeto que poderia ser passada para fora de seu wrapper de contexto. No COM+, isso é desnecessário; as referências de objeto normal (esse ponteiros) funcionam.