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.
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.