Partager via


Activation contextuelle

Dans COM+, chaque objet COM est créé avec un contexte associé. Cela signifie qu’un nouveau contexte doit être créé et initialisé ou qu’un contexte existant approprié est utilisé. Ce processus est appelé activation. Dans COM+, un objet est activé soit dans son propre contexte, soit dans celui de son créateur (objet qui a demandé à activer l’objet, par exemple, en appelant CoCreateInstance).

Dans certaines circonstances, par exemple avec le regroupement d’objets, un objet est activé sans être créé à partir de zéro. Dans ce cas, une instance en cours d’exécution est activée dans un contexte. Au cours de sa durée de vie, il peut être activé à plusieurs reprises dans différents contextes.

Le mécanisme de base est le même dans les deux cas : un objet est associé à un contexte et ce contexte est correctement initialisé pour représenter les besoins d’exécution de l’objet.

Flux de propriétés de contexte

Lorsqu’un objet est activé en réponse à une demande de création à partir d’un autre objet, COM+ doit effectuer une intermédiaire entre eux pour activer correctement l’objet en aval. COM+ doit comparer le contexte de l’appelant avec la configuration du composant appelé, puis décider où activer le composant en aval et comment initialiser ses propriétés de contexte.

Pour découvrir la configuration du composant, COM+ le recherche dans la base de données d’inscription de classe COM+, qui est optimisée pour les recherches d’exécution extrêmement rapides. (Cela est déterminé par la façon dont vous avez configuré un composant lors de son installation dans une application COM+.) La configuration du composant est ensuite examinée par rapport à l’état des propriétés de contexte de l’appelant.

Dans certains cas, la configuration est cohérente avec le contexte de l’appelant et le composant peut être activé dans le contexte de l’appelant. Cela ne peut se produire que si le contexte de l’appelant répond à toutes les exigences d’exécution du nouvel objet.

Lorsque le composant en aval ne peut pas être activé dans le contexte de l’appelant, il est activé dans son propre contexte dans un appartement approprié. Dans ce cas, certaines propriétés de contexte peuvent passer de l’appelant à l’appelé. Par exemple, si l’appelant est associé à une transaction et que l’appelé prend en charge les transactions, le nouvel objet obtient son propre contexte (pour voter dans la transaction, il doit avoir son propre indicateur cohérent) et hérite de l’ID de transaction et de l’ID d’activité de l’appelant (qui résident dans le même domaine de transaction et de synchronisation).

Propriétés de contexte ignorées

Selon la façon dont un composant est configuré, certaines propriétés de contexte peuvent ne pas jouer de rôle pour déterminer s’il est activé dans le contexte du créateur ou dans son propre contexte. Par exemple, les paramètres Transactions désactivées et Synchronisation désactivée, indiquant la présence d’une transaction ou d’un domaine de synchronisation, ne jouent aucun rôle dans l’activation du composant. Ces propriétés sont fondamentalement ignorées lorsque le contexte est transmis. Ou si un composant utilise uniquement la vérification de l’accès au niveau du processus, sa propriété de contexte de sécurité est ignorée. La configuration de sécurité du composant ne jouera jamais de rôle dans son activation.

Forcer l’activation dans le contexte de l’appelant

Dans certaines circonstances, vous pouvez souhaiter qu’un objet soit activé uniquement dans le contexte de son appelant, c’est-à-dire qu’il n’est jamais activé dans son propre contexte. Par exemple, vous pouvez contrôler le comportement de l’objet lorsqu’il est appelé au-delà d’une limite de contexte.

Vous pouvez vous assurer qu’un objet ne peut pas être activé dans son propre contexte en sélectionnant l’option De contexte Doit être activé dans les appelants sousl’onglet Activation de la page Propriétés du composant, à l’aide de l’outil d’administration Services de composants. (Pour obtenir des instructions pas à pas, consultez Application de l’activation dans le contexte de l’appelant .) Lorsque vous sélectionnez cette option, si l’objet ne peut pas être activé dans le contexte de l’appelant, CoCreateInstance échoue, retournant CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.

Contexte par défaut

Des contextes par défaut existent pour prendre en charge les composants non configurés, c’est-à-dire les composants COM non installés dans les applications COM+ et non inscrits dans la base de données d’inscription de classe COM+. Si les composants non configurés ont un modèle de thread compatible, ils sont activés dans le contexte de l’appelant. Sinon, ils sont activés dans un contexte par défaut dans l’appartement approprié. Chaque appartement a un contexte par défaut pour prendre en charge les objets COM qui n’utilisent pas les services COM+.

Activation du raccordement

En implémentant IObjectControl::Activate et IObjectControl::D eactivate, vous pouvez associer l’activation et la désactivation pour effectuer une initialisation spéciale dans le nouveau contexte. Ces méthodes sont appelées par COM+ à certains moments du cycle de vie d’un objet, lorsque l’objet est configuré pour utiliser l’activation JIT ou le regroupement d’objets. Pour plus d’informations, consultez Activation juste-à-temps COM+ et Regroupement d’objets COM+ .

Interception des appels inter-contextes