Activation du contexte
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é d’activation. Dans COM+, un objet est activé dans son propre contexte ou dans celui de son créateur (objet qui a demandé que l’objet soit activé, par exemple, en appelant CoCreateInstance).
Dans certaines circonstances, comme avec 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 fil 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 des 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 basculer entre eux pour activer correctement l’objet en aval. COM+ doit comparer le contexte de l’appelant à 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é pour les recherches extrêmement rapides au moment de l’exécution. (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 peut se produire uniquement si le contexte de l’appelant satisfait à 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é. Lorsque cela se produit, 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 configuration d’un composant, certaines propriétés de contexte peuvent jouer aucun 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és et synchronisation désactivés, 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 acheminé. Ou si un composant utilise uniquement la vérification d’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 souhaiterez peut-être qu’un objet soit activé uniquement dans le contexte de son appelant, autrement dit, jamais activé dans son propre contexte. Par exemple, vous pouvez contrôler le comportement de l’objet lorsqu’il est appelé sur une limite de contexte.
Vous pouvez vous assurer qu’un objet ne peut pas être activé dans son propre contexte en sélectionnant l'Doit être activé dans le contexte des appelants option sous l’onglet Activation de la page Propriétés Propriétés du composant, à l’aide de l’outil d’administration services de composants. (Consultez application de l’activation dans le contexte de l’appelant pour obtenir des instructions pas à pas.) Lorsque vous sélectionnez cette option, si l’objet ne peut pas être activé dans le contexte de l’appelant, CoCreateInstance échoue, en retournant CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.
Contexte par défaut
Les 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 threading 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 de 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 points 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 d’activation juste-à-temps COM+ et regroupement d’objets COM+.
Rubriques connexes