Контексты 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+ для компонентов. Однако в некоторых случаях может потребоваться рассмотреть следующие два взаимосвязанных аспекта контекстов более подробно:
- Активация контекста или инициализация объекта в соответствующем контексте.
- Перехват или то, что COM+ делает при вызовах через границу контекста.
Отношение к оболочкам контекста MT
Контексты эффективно заменяют оболочки контекста JSON. Цель, которую они использовали, предоставляя автоматические службы путем перехвата запросов на создание, теперь является интегрированной функцией COM+. В результате больше не нужно использовать функцию Сейф Ref. В ПРИЛОЖЕНИИ MT Сейф Ref использовался для получения ссылки на объект, который может передаваться за пределы его оболочки контекста. В COM+это не требуется; обычные ссылки на объекты (эти указатели) работают.