Condividi tramite


Individuazione delle partizioni durante l'attivazione

L'individuazione della partizione corretta in cui attivare un componente dipende dagli elementi seguenti:

  • Chiamata di funzione e parametri usati nel programma chiamante per attivare il componente
  • Indica se il componente attivato è locale o remoto
  • Uso interno della cache delle partizioni

Programma chiamante

COM+ seleziona la partizione per l'attivazione dei componenti in base al modo in cui il programma chiamante attiva il componente.

Quando si seleziona una partizione per l'attivazione dei componenti, è possibile eseguire tre azioni diverse. L'azione eseguita dipende dal modo in cui il programma chiamante crea un'istanza dell'oggetto, indipendentemente dal fatto che la chiamata di funzione includa un moniker di partizione, costituito da un ID di partizione e un CLSID o include solo un CLSID.

La tabella seguente illustra le varie azioni che COM+ può eseguire, in ordine di precedenza, per individuare una partizione.

Chiamata di funzione Parametro Azione COM+
CoGetObject o GetObject
Moniker di partizione (include ID partizione e CLSID)
Usa l'ID partizione specificato nel moniker di partizione.
Cocreateinstance
CLSID
Usa l'ID partizione della partizione predefinita dell'identità utente o l'ID di partizione aggiunto al contesto durante un'attivazione precedente del componente nello stesso processo.

Le azioni COM+ elencate nella tabella precedente sono illustrate nelle sezioni seguenti.

Uso di moniker di partizione

È possibile selezionare una partizione in modo esplicito all'interno di una chiamata di funzione usando un moniker di partizione. Un moniker di partizione viene usato all'interno del codice per specificare in modo esplicito la partizione del componente attivato. Se viene usato un moniker di partizione per individuare la partizione, l'attivazione avviene da tale partizione. Ovvero, l'ID di partizione incluso nel moniker ha la precedenza sulla partizione predefinita dell'utente o su un ID di partizione presente nel contesto del chiamante.

Nel codice C++ la sintassi per l'uso di un moniker di partizione è la seguente:

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

L'esempio seguente mostra un frammento di codice C++, in cui viene usato un moniker di partizione come argomento per la funzione 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);

Nel codice Visual Basic la sintassi per un moniker di partizione è la seguente:

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

L'esempio seguente mostra un frammento di codice Visual Basic, in cui viene usato un moniker di partizione come argomento per la funzione GetObject :

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

Uso del mapping predefinito

Quando la funzione CoCreateInstance viene usata per attivare un componente, usando CLSID del componente, COM+ usa il mapping predefinito dell'identità utente, ovvero il set di partizioni a cui viene eseguito il mapping dell'utente all'interno di Active Directory. Tuttavia, se l'utente non è mappato a un set di partizioni all'interno di Active Directory, viene selezionata la partizione globale.

Uso di ID partizione e contesto oggetto

Una delle cinque proprietà assegnate a una nuova partizione è l'ID partizione. Quando il programma client chiama la funzione CoCreateInstance per creare un'istanza di un oggetto, l'ID partizione viene aggiunto al contesto. L'uso dell'ID di partizione dal contesto per individuare la partizione è importante perché garantisce che dopo l'avvio di una catena di attivazioni, l'ID partizione rimane invariato, a meno che non venga modificato in modo esplicito tramite un moniker di partizione.

Per altre informazioni sull'individuazione delle partizioni durante l'attivazione, vedere Com+ Queued Components and Partitions (Componenti e partizioni in coda COM+).

Attivazione locale e remota

  • Se il componente chiamato esiste in un altro computer, le proprietà della partizione (incluso l'ID partizione) vengono sottoposte a marshalling all'altro computer e il componente viene attivato dalla partizione sottoposta a marshalling. Se non è stato eseguito il marshalling dell'ID partizione, COM+ usa il set di partizioni predefinito mappato all'identità utente all'interno di Active Directory.

Cache delle partizioni

In un ambiente di dominio, COM+ usa i mapping in Active Directory per individuare la partizione corretta per l'attivazione dei componenti. Tuttavia, le ricerche frequenti in Active Directory possono comportare un traffico di rete eccessivo. Per ridurre al minimo il traffico di rete risultante da ricerche frequenti del mapping tra utente e set di partizioni in Active Directory, COM+ usa una cache di partizione.

La cache delle partizioni contiene i mapping eseguiti in Active Directory tra le identità utente o le unità organizzative e i relativi set di partizioni. Questa cache di partizione si trova nel server applicazioni in cui risiedono le applicazioni COM+.

Quando COM+ deve determinare la partizione predefinita di un utente o convalidare i diritti di accesso di un utente a una partizione, controlla la cache delle partizioni in locale per cercare il mapping dell'utente, invece di controllare Active Directory in remoto.

Se la ricerca nella cache delle partizioni ha esito negativo, COM+ verifica Active Directory. Se la ricerca ha esito positivo in Active Directory, COM+ archivia il mapping nella cache delle partizioni. Al successivo esecuzione di una ricerca per il mapping da utente a partizione, COM+ lo troverà nella cache delle partizioni.

La figura seguente illustra il processo usato da COM+ per individuare una partizione per l'attivazione dei componenti.

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

Le dimensioni della cache e la scadenza delle voci della cache vengono impostate tramite chiavi del Registro di sistema. Per informazioni sulla configurazione di queste chiavi del Registro di sistema, vedere Creazione e configurazione di partizioni COM+.

Nota

Se un computer server è disconnesso dalla rete e il mapping da utente a partizione viene modificato mentre il server è disconnesso, la cache delle partizioni potrebbe contenere il mapping da utente a partizione obsoleto. Questo potrebbe causare un errore di attivazione se il mapping da utente a partizione è il meccanismo usato per attivare un componente.

Individuazione di un componente per l'attivazione