. Этот метод возвращает булево значение, указывающее, участвует ли объект в данный момент в транзакции.
Профессиональным программистам C# приходится иногда разрабатывать транзакционные компоненты для удаленной установки, которую они не контролируют. Чтобы убедиться, что сборки, требующие транзакционной поддержки, правильно для нее сконфигурированы, можно вызвать свойство
IsInTransaction
класса
ContextUtil
и инициировать ошибку, если это свойство задано как
false
.
В примере кода ниже свойство
IsInTransaction
используется для гарантии, что сборка правильно сконфигурирована, прежде чем ей будет разрешено ей начать какую-либо работу. Код порождает исключение, если
IsInTransaction
имеет значение
false
. Можно протестировать это, изменяя атрибут класса на
TransactionalOptionDisabled
.
[AutoComplete]
public bool PlaceOrder(bool CommitTrans) {
if (!ContextUtil.IsInTransaction) {
throw new
ConfigurationException("This assembly needs to be configured for" + " transactions.");
}
// Выполнить транзакцию
}
Этим мы завершаем обсуждение транзакций COM+ и класса
ContextUtil
. Давайте перейдем к пулам объектов.
Использование пудов объектов со сборками .NET
Нетрудно сконфигурировать компонент .NET для пула объектов. Для этого необходимо изменить класс с помощью атрибута и реализовать интерфейс в этом классе.
Атрибут ObjectPooling
Атрибутом с помощью которого необходимо изменить класс, является
ObjectPooling
. Этот атрибут получает четыре аргумента.
1. Аргумент
Enabled
является первым. Ему должно быть присвоено значение true.
2. Аргумент
MinPoolSize
определяет минимальное число экземпляров объектов, которое должны поддерживать службы COM+ в пуле объектов класса.
3. Аргумент
MaxPoolSize
определяет максимальное число экземпляров объектов, которое должны поддерживать службы COM+ в пуле объектов класса.
4. Аргумент
CreationTimeOut
определяет период времени, в течение которого службы COM+ должны пытаться получить объект из пула, прежде чем вернуть отказ.
Далее следует пример атрибута
ObjectPooling
со всеми четырьмя аргументами, примененными к классу. Мы расширим этот фрагмент кода в конце данного раздела.