Condividi tramite


Attivazione del contesto

In COM+, ogni oggetto COM viene creato con un contesto associato. Ciò significa che è necessario creare e inizializzare un nuovo contesto oppure usare un contesto esistente appropriato. Questo processo è noto come attivazione. In COM+, un oggetto viene attivato nel proprio contesto o in quello del relativo creatore (un oggetto che ha richiesto l'attivazione dell'oggetto, ad esempio chiamando CoCreateInstance).

In alcune circostanze, ad esempio con il pool di oggetti, un oggetto viene attivato senza essere creato da zero. In questo caso, un'istanza in esecuzione viene attivata all'interno di un contesto. Nel corso della sua durata, può essere attivato ripetutamente in contesti diversi.

Il meccanismo di base è lo stesso in entrambi i casi, ovvero un oggetto è associato a un contesto e tale contesto viene inizializzato correttamente per rappresentare le esigenze di runtime dell'oggetto.

Flusso delle proprietà del contesto

Quando un oggetto viene attivato in risposta a una richiesta di creazione da un altro oggetto, COM+ deve mediare tra di essi per attivare correttamente l'oggetto downstream. COM+ deve confrontare il contesto del chiamante con la configurazione del componente chiamato e quindi decidere dove attivare il componente downstream e come inizializzare le relative proprietà di contesto.

Per individuare la configurazione del componente, COM+ lo cerca nel database di registrazione della classe COM+, ottimizzato per ricerche di runtime estremamente veloci. Questo è determinato dal modo in cui è stato configurato un componente durante l'installazione in un'applicazione COM+. La configurazione del componente viene quindi esaminata in base allo stato delle proprietà di contesto del chiamante.

In alcuni casi, la configurazione è coerente con il contesto del chiamante e il componente può essere attivato all'interno del contesto del chiamante. Ciò può verificarsi solo se il contesto del chiamante soddisfa tutti i requisiti di runtime del nuovo oggetto.

Quando il componente downstream non può essere attivato all'interno del contesto del chiamante, viene attivato nel proprio contesto in un apartment appropriato. In questo caso, alcune proprietà di contesto possono passare dal chiamante al chiamato. Ad esempio, se il chiamante è associato a una transazione e il chiamato supporta le transazioni, il nuovo oggetto ottiene il proprio contesto (per votare nella transazione, deve avere il proprio flag coerente) e eredita l'ID transazione e l'ID attività del chiamante (che risiedono all'interno dello stesso dominio di transazione e sincronizzazione).

Proprietà del contesto ignorate

A seconda della configurazione di un componente, alcune proprietà di contesto potrebbero non svolgere alcun ruolo per determinare se è attivato nel contesto dell'autore o nel proprio contesto. Ad esempio, le impostazioni Transazioni disabilitate e Sincronizzazione disabilitate, che indicano la presenza di una transazione o di un dominio di sincronizzazione, non avranno alcun ruolo nell'attivazione del componente. Queste proprietà vengono fondamentalmente ignorate quando viene eseguito il flusso del contesto. In alternativa, se un componente usa solo il controllo di accesso a livello di processo, la relativa proprietà del contesto di sicurezza viene ignorata. La configurazione di sicurezza del componente non avrà mai un ruolo nell'attivazione.

Uso forzato dell'attivazione nel contesto del chiamante

In alcune circostanze, potrebbe essere necessario attivare un oggetto solo nel contesto del chiamante, ovvero non viene mai attivato nel proprio contesto. Ad esempio, è possibile controllare il comportamento dell'oggetto quando viene chiamato attraverso un limite di contesto.

È possibile assicurarsi che un oggetto non possa essere attivato nel proprio contesto selezionando l'opzione Deve essere attivata nel contesto dei chiamanti nella scheda Attivazione della pagina Proprietà componente, utilizzando lo strumento amministrativo Servizi componenti. (Vedere Applicazione dell'attivazione nel contesto del chiamante per istruzioni dettagliate. Quando si seleziona questa opzione, se l'oggetto non può essere attivato nel contesto del chiamante, CoCreateInstance ha esito negativo, restituendo CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.

Contesto predefinito

Esistono contesti predefiniti per supportare componenti non configurati, ovvero componenti COM non installati nelle applicazioni COM+ e non registrati nel database di registrazione della classe COM+. Se i componenti non configurati hanno un modello di threading compatibile, vengono attivati nel contesto del chiamante. In caso contrario, vengono attivati in un contesto predefinito nell'appartamento appropriato. Ogni apartment ha un contesto predefinito per supportare oggetti COM che non usano servizi COM+.

Attivazione di hook

Implementando IObjectControl::Activate e IObjectControl::D eactivate, è possibile associare l'attivazione e la disattivazione insieme per eseguire un'inizializzazione speciale nel nuovo contesto. Questi metodi vengono chiamati da COM+ in determinati punti del ciclo di vita di un oggetto, quando l'oggetto è configurato per l'uso dell'attivazione JIT o del pool di oggetti. Per altre informazioni, vedere ATTIVAZIONE JIR e POOL di oggetti COM+.

Intercettazione di chiamate tra contesti