Compartilhar via


Localizando partições durante a ativação

Localizar a partição correta na qual ativar um componente depende do seguinte:

  • A chamada de função e os parâmetros usados no programa de chamada para ativar o componente
  • Se o componente que está sendo ativado é local ou remoto
  • O uso interno do cache de partição

O Programa de Chamada

COM+ seleciona a partição para ativação do componente com base em como o programa de chamada ativa o componente.

Há três ações diferentes que o COM+ pode executar ao selecionar uma partição para ativação de componente. A ação executada depende de como o programa de chamada instancia o objeto que é, se a chamada de função inclui um moniker de partição, que consiste em um ID de partição e um CLSID, ou inclui apenas um CLSID.

A tabela a seguir mostra as várias ações que COM+ pode tomar, em ordem de precedência, para localizar uma partição.

Chamada de função Parâmetro Acção COM+
CoGetObject ou GetObject
Moniker de partição (inclui ID de partição e CLSID)
Usa o ID de partição especificado no moniker de partição.
:CoCreateInstance
CLSID
Usa o ID de partição da partição padrão da identidade do usuário ou o ID de partição que foi adicionado ao contexto durante uma ativação de componente anterior no mesmo processo.

As ações COM+ listadas na tabela anterior são explicadas nas seções a seguir.

Uso de Monikers de Partição

Uma partição pode ser selecionada explicitamente dentro de uma chamada de função usando um moniker de partição. Um moniker de partição é usado dentro do código para especificar explicitamente a partição do componente ativado. Se um moniker de partição for usado para localizar a partição, a ativação ocorrerá a partir dessa partição. Ou seja, o ID de partição incluído no moniker tem precedência sobre a partição padrão do usuário ou sobre um ID de partição que existe no contexto do chamador.

No código C++, a sintaxe para o uso de um moniker de partição é a seguinte:

HRESULT CoGetObject(
  L"partition:partitionGUID/new:clsid",
  pBindOptions,
  IID_IUnknown,
  (void**)&pIUnknown);

O exemplo a seguir mostra um trecho de código C++, no qual um moniker de partição está sendo usado como um argumento para a função CoGetObject:

// Create CLSID1 configured in the Production partition.
HRESULT hr = CoGetObject(
  L"partition:{35056070-D5B7-4b59-9FBF-0D23417F6937}/new:CLSID1",
  pBindOptions, IID_IUnknown, (void**)&pIUnknown);

No código do Visual Basic, a sintaxe para um moniker de partição é a seguinte:

GetObject("partition:partitionGUID/new:CLSID") As Object

O exemplo a seguir mostra um trecho de código do Visual Basic, no qual um moniker de partição está sendo usado como um argumento para a função GetObject :

Dim objCLSID1 As Object
Set objCLSID1 = GetObject( _
   "partition:{35056070-D5B7-4b59-9FBF-0D23417F6937}/new:CLSID1")

Uso do mapeamento padrão

Quando a função CoCreateInstance é usada para ativar um componente, usando o CLSID do componente, COM+ usa o mapeamento de identidade de usuário padrão, ou seja, o conjunto de partições para o qual o usuário é mapeado no Active Directory. No entanto, se o usuário não for mapeado para um conjunto de partições no Active Directory, a Partição Global será selecionada.

Uso de IDs de partição e contexto de objeto

Uma das cinco propriedades atribuídas a uma nova partição é o ID da partição. Quando o programa cliente chama a função CoCreateInstance para instanciar um objeto, o ID da partição é adicionado ao contexto. Usar o ID da partição do contexto para localizar a partição é importante porque garante que, após o início de uma cadeia de ativações, o ID da partição permaneça o mesmo, a menos que seja alterado explicitamente por meio de um moniker de partição.

Para obter informações adicionais sobre como localizar partições durante a ativação, consulte Componentes e partições em fila COM+.

Ativação Local e Remota

  • Se o componente que está sendo chamado existir em outro computador, as propriedades da partição (incluindo o ID da partição) serão empacotadas para o outro computador e o componente será ativado a partir da partição empacotada. Se nenhuma ID de partição tiver sido empacotada, COM+ usará o conjunto de partições padrão mapeado para a identidade do usuário no Active Directory.

O cache de partição

Em um ambiente de domínio, COM+ usa os mapeamentos no Active Directory para localizar a partição correta para ativação de componente. No entanto, pesquisas frequentes no Active Directory podem resultar em tráfego de rede excessivo. Para minimizar o tráfego de rede resultante de pesquisas frequentes de mapeamento de usuário para conjunto de partições no Active Directory, o COM+ usa um cache de partição.

O cache de partição contém os mapeamentos que foram feitos no Active Directory entre identidades de usuário ou UOs e seus conjuntos de partições. Esse cache de partição está localizado no servidor de aplicativos no qual os aplicativos COM+ residem.

Quando o COM+ precisa determinar a partição padrão de um usuário ou validar os direitos de acesso de um usuário a uma partição, ele verifica o cache de partição localmente para procurar o mapeamento do usuário, em vez de verificar o Active Directory remotamente.

Se a pesquisa no cache de partição falhar, COM+ verificará o Active Directory. Se a pesquisa for bem-sucedida no Active Directory, o COM+ armazenará esse mapeamento no cache de partição. Na próxima vez que uma pesquisa for feita para esse mapeamento de usuário para partição, COM+ irá encontrá-lo no cache de partição.

A ilustração a seguir mostra o processo que COM+ usa para localizar uma partição para ativação de componente.

Diagram that shows a troubleshooting tree for the process that COM+ uses to locate a partition for component activation.

O tamanho do cache e o tempo de expiração das entradas de cache são definidos por meio de chaves do Registro. Para obter informações sobre como configurar essas chaves do Registro, consulte Criando e configurando partições COM+.

Observação

Se um computador servidor estiver desconectado da rede e o mapeamento de usuário para partição for alterado enquanto o servidor estiver desconectado, o cache de partição poderá conter mapeamento de usuário para partição desatualizado. Isso pode resultar em um erro de ativação se o mapeamento de usuário para partição for o mecanismo usado para ativar um componente.

Localizando um componente para ativação