Partager via


Contextes COM+

Pour les composants configurés s’exécutant dans des applications COM+, les contextes constituent la base sur laquelle les services COM+ sont fournis. Dans COM+, un contexte est défini comme un ensemble de propriétés d’exécution associées à un ou plusieurs objets COM utilisés pour fournir des services pour ces objets.

Dans COM+, chaque objet COM est associé exactement à un contexte tel qu’il s’exécute (c’est-à-dire, entre son activation et sa désactivation), et chaque contexte réside dans un seul appartement COM. Plusieurs objets peuvent s’exécuter dans le même contexte, et plusieurs contextes peuvent résider dans le même appartement. Initialisées lorsqu’un objet est activé, les propriétés de contexte, telles que les propriétés de contexte de sécurité, représentent les besoins d’exécution d’un objet.

Notes

Pour les composants non configurés qui n’utilisent pas les services COM+, le contexte est, pour la plupart, ignoré.

 

COM+ utilise des propriétés de contexte comme base pour fournir des services d’exécution. Ces propriétés contiennent l’état qui détermine la façon dont l’environnement d’exécution exécute les services pour les objets dans le contexte. Dans certains cas, vous pouvez interagir directement avec les propriétés de contexte d’un objet pour indiquer un état pertinent pour un service fourni pour l’objet. Par exemple, vous effectuez cette opération lorsqu’un objet participant à une transaction automatique vote sur le résultat de la transaction.

Pour une présentation détaillée de la base COM de ces concepts, consultez Processus, Threads et Appartements.

Interaction programmatique avec les propriétés de contexte

Chaque contexte a un objet ObjectContext associé qui effectue le suivi de ses propriétés. Vous pouvez accéder à ObjectContext en appelant la fonction GetObjectContext . Une fois que vous avez accédé à ObjectContext, vous pouvez appeler des méthodes sur l’interface IObjectContext qu’il expose pour manipuler les propriétés de contexte.

Par exemple, l’appel de IObjectContext::SetComplete a pour effet de définir le bit de cohérence de transaction sur « cohérent » et le bit effectué de l’activation JIT sur « done » sur le contexte associé à l’objet . « Cohérent » signale à COM+ que vous votez pour valider la transaction, et « terminé » indique que votre objet est prêt à être désactivé lorsque la méthode est retournée.

Outre IObjectContext, d’autres interfaces spécialisées fournissant l’accès aux propriétés de contexte sont IObjectContextInfo, IContextState et IObjectContextActivity. Dans une certaine mesure, ISecurityCallContext accède également aux propriétés de contexte. Vous pouvez utiliser IGetSecurityCallContext::GetSecurityCallContext pour obtenir ISecurityCallContext.

Présentation de l’activation et de l’interception

En règle générale, vous devez réfléchir au contexte uniquement dans la mesure où il représente un certain nombre de propriétés, que vous pouvez définir ou obtenir, qui sont utilisées pour fournir des services COM+ pour vos composants. Toutefois, dans certaines circonstances, vous devrez peut-être examiner plus en détail les deux facettes interdépendantes suivantes des contextes :

  • Activation de contexte ou initialisation d’un objet dans un contexte approprié.
  • Interception, ou ce que COM+ fait sur les appels au-delà d’une limite de contexte.

Relation avec les wrappers de contexte MTS

Les contextes remplacent efficacement les wrappers de contexte MTS. L’objectif qu’ils ont servi, à savoir fournir des services automatiques en interceptant les demandes de création, est désormais une fonctionnalité intégrée de COM+. Par conséquent, vous n’avez plus besoin d’utiliser la fonction SafeRef . Dans MTS, SafeRef a été utilisé pour obtenir une référence à votre objet qui pouvait être passée en dehors de son wrapper de contexte. Dans COM+, cela n’est pas nécessaire ; les références d’objet normal (ce pointeur) fonctionnent.