Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Объект пула может участвовать в управлении своей активностью в пуле COM+ с помощью реализации IObjectControl. При создании объекта в пуле он агрегируется в более крупный объект, который будет управлять объектом, вызывая следующие методы в IObjectControl в обычных точках жизненного цикла объекта:
- Активировать— вызывается всякий раз, когда объект возвращается клиенту, и активируется в заданном контексте.
- Деактивировать— вызывается всякий раз, когда объект освобождается клиентом или, в случае объекта, активированного JIT, при его деактивации.
- CanBePooled— вызывается всякий раз, когда объект должен возвращаться в общий пул.
Реализация IObjectControl является необязательным, за исключением транзакционных объектов, которые всегда должны реализовывать CanBePooled для мониторинга состояния ресурсов, которые они хранят. Однако в большинстве случаев рекомендуется реализовать IObjectControl, так как он обеспечивает эффективный способ управления поведением объекта в пуле, как описано ниже.
Выполнение инициализации Context-Specific
С помощью активироватьможно инициализировать объект в контексте, в котором он активируется для данного клиента. Например, чтобы определить, имеет ли объект привязку к транзакции (его ресурсы уже могут быть учтены), можно получить идентификатор транзакции, связанный с контекстом.
Обычно вы бы использовали Activateдля выполнения инициализации, согласованной между любыми методами, предлагаемыми объектом, рассматривая это как контекстно-специфическую часть конструктора объекта.
Очистка любого состояния клиента
Используя Деактивировать, вы можете избавиться от любого состояния клиента, которое может существовать, чтобы ваш объект мог вернуться в пул в полностью универсальном состоянии и затем быть использован любым клиентом без ущерба для безопасности или изоляции.
Управление повторным использованием объекта
Используя CanBePooled, можно отслеживать внутреннее состояние объекта и сообщать о том, подходит ли он для повторного использования. Если CanBePooled возвращает значение True и максимальное значение пула не достигнуто, объект помещается обратно в общий пул. Если CanBePooled возвращает false, объект удаляется. В случае с транзакционными компонентами возвращение значения False приведет к провалу текущей транзакции.
Обычно вы сохраняете глобальный элемент данных для объекта, и если обнаружите, что подключение неисправное или ресурс какого-либо рода находится в плохом состоянии, установите его так, чтобы он отражал текущую ситуацию, и вернуть это через CanBePooled.
Если объект не реализует CanBePooled, экземпляры будут повторно использоваться до тех пор, пока не будет достигнут максимальный уровень пула.
Связанные разделы
-
Требования к объектам для пула