Поделиться через


Контексты COM+

Для настроенных компонентов, работающих в приложениях COM+, контексты являются основой для предоставления служб COM+. В COM+контекст определяется как набор свойств времени выполнения, связанных с одним или несколькими COM-объектами, которые используются для предоставления служб для этих объектов.

В COM+каждый COM-объект связан с точно одним контекстом при выполнении (то есть между активацией и деактивацией), а каждый контекст находится в одной квартире COM. Несколько объектов могут выполняться в одном контексте, и несколько контекстов могут находиться в одной квартире. Инициализируется при активации объекта, свойства контекста, такие как свойства контекста безопасности, представляют потребности во время выполнения объекта.

Заметка

Для ненастроенных компонентов, которые не используют службы COM+, контекст игнорируется.

 

COM+ использует свойства контекста в качестве основы для предоставления служб времени выполнения. Эти свойства хранят состояние, определяющее, как среда выполнения выполняет службы для объектов в контексте. В некоторых случаях можно напрямую взаимодействовать со свойствами контекста объекта, чтобы указать определенное состояние, соответствующее службе, предоставляемой для объекта. Например, это можно сделать, если объект, участвующий в автоматическом голосовании транзакций по результату транзакции.

Подробное обсуждение основы COM этих концепций см. в процессах, потоках и квартирах.

Программное взаимодействие со свойствами контекста

Каждый контекст имеет связанный объект ObjectContext, который отслеживает его свойства. Доступ к ObjectContext можно получить, вызвав функцию GetObjectContext. Получив доступ к ObjectContext, можно вызвать методы в интерфейсе IObjectContext, который он предоставляет для управления свойствами контекста.

Например, вызов IObjectContext::SetComplete имеет эффект настройки бита согласованности транзакций на "согласованный", а активация JIT-активации выполнена по контексту, связанному с объектом. "Согласованные" сигналы COM+ о том, что вы голосуете за фиксацию транзакции, и "готово" указывает, что объект готов к деактивации при возврате метода.

Помимо IObjectContext, другие специализированные интерфейсы, обеспечивающие доступ к свойствам контекста, IObjectContextInfo, IContextStateи IObjectContextActivity. В определенной степени ISecurityCallContext также обращается к свойствам контекста. Вы можете использовать IGetSecurityCallContext::GetSecurityCallContext для получения ISecurityCallContext.

Общие сведения о активации и перехвате

Как правило, необходимо думать о контексте только в той степени, в которой он представляет ряд свойств, некоторые из которых можно задать или получить, которые используются для предоставления служб COM+ для компонентов. Однако в некоторых случаях может потребоваться рассмотреть следующие два взаимосвязанных аспекта контекстов более подробно:

Отношение к оболочкам контекста MT

Контексты эффективно заменяют оболочки контекста JSON. Цель, которую они использовали, предоставляя автоматические службы путем перехвата запросов на создание, теперь является интегрированной функцией COM+. В результате больше не нужно использовать функцию SafeRef. В ПРИЛОЖЕНИИ MT SafeRef использовалось для получения ссылки на объект, который можно передать за пределы его оболочки контекста. В COM+это не требуется; обычные ссылки на объекты (это указатели) работают.