Compartilhar via


Interceptação de chamadas entre contextos

Quando um objeto é ativado em um determinado contexto, as chamadas subsequentes de ou para ele, dentro do contexto, são tratadas de forma diferente das chamadas através do limite de contexto. As chamadas através do limite de contexto são tratadas com proxies leves. Esses proxies lidam com qualquer mediação necessária para ajustar o ambiente de tempo de execução de um que acomoda o chamador para um que acomoda o chamado. Esse processo é conhecido como interceptação.

A interceptação de chamadas entre contextos é necessária porque objetos em contextos diferentes têm requisitos de tempo de execução diferentes — essa é precisamente a razão dos contextos. COM+ intercepta quaisquer referências de objeto que você passar como parâmetros de método e converte-as automaticamente em proxies para que sejam utilizáveis no novo contexto.

Se você compartilhar referências de objeto através de limites de contexto por outros meios, por exemplo, em variáveis globais, sempre deverá usar CoMarshalInterface e CoUnmarshalInterface. Essas funções podem converter uma referência de objeto em um proxy utilizável em um contexto diferente. Nunca compartilhe uma referência de objeto bruto entre limites de contexto.

O comportamento de chamadas através do contexto pode ter consequências indesejadas no caso de objetos expondo interfaces que não podem ser empacotadas. Nessa circunstância, é provável que você queira insistir para que o objeto que não pode ser empacotado seja ativado apenas no contexto de seu chamador e nunca em seu próprio contexto. Você pode fazer isso selecionando a opção Deve ser ativado no contexto do chamador na guia Ativação da página Propriedades do componente. (Veja Impondo a ativação no contexto do chamador para obter instruções passo a passo.)

Ativação de contexto