Книга: C# для профессионалов. Том II

Другие полезные методы ContextUtil

Другие полезные методы ContextUtil

Рассмотрим еще пару методов класса ContextUtil которые могут оказаться полезны при программировании на C#.

Первый метод IsCallerInRole() предназначен для безопасности на основе ролей. В качестве входной переменной этот метод получает строковую переменную, содержащую имя определенной роли системы безопасности Windows 2000. Он возвращает булево значение, указывающее, является или нет пользователь, который в данный момент вызывает объект, членом указанной роли.

В примере кода ниже добавлена проверка, чтобы убедиться, что пользователь, пытающийся вызвать PlaceOrder(), является авторизованным членом роли Administrators. Если пользователь не является членом этой роли, то PlaceOrder() порождает исключение.

[AutoComplete]
public bool PlaceOrder(bool CommitTrans) {
 if (!ContextUtil.IsCallerInRole("Administrators") {
  throw new AccessViolationException("User is not authorized to place" + "orders.");
 }
 // Поместить код транзакции здесь
}

Вторым полезным методом класса ContextUtil является IsInTransaction(). Этот метод возвращает булево значение, указывающее, участвует ли объект в данный момент в транзакции.

Профессиональным программистам 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. Давайте перейдем к пулам объектов.

Оглавление книги


Генерация: 4.199. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз