Бөлісу құралы:


Операции com+ Администратор istration в транзакциях

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

Преимущества выполнения операций Администратор istration в транзакциях

  • **Согласованность данных— **Администратор истистиционные операции, выполняемые в рамках транзакции, фиксируются или прерваны в целом, хотя существуют некоторые ресурсы каталога, не связанные с транзакциями COM+, для которых это может быть не так. (См. ресурсы каталога, отличные от транзакций COM+ ниже.)
  • **Согласованное развертывание на нескольких компьютерах. **Если вы развертываете приложения COM+ на нескольких серверах, вы можете гарантировать, что все серверы остаются с одинаковыми конфигурациями.
  • **Масштабирование и производительность. **При выполнении нескольких операций в транзакции все операции записи в RegDB выполняются одновременно. Сохраняемые записи в RegDB являются относительно дорогой операцией; Если вы делаете много операций записи в RegDB, вы можете получить большую выгоду от их выполнения одновременно, а не при каждом вызове SaveChanges.

Поведение изоляции RegDB

Чтобы обеспечить правильную согласованность данных и сериализуемые транзакции, RegDB применяет определенное поведение блокировки и изоляции при выполнении операций администрирования в транзакциях.

Всякий раз, когда компонент, выполняющий работу в транзакции, вызывает любой метод, который приведет к записи в каталог COM+ (например, SaveChanges, InstallApplication или InstallComponent), блокировка записи принимается на серверном коде com+ каталога, который блокирует выполнение любых других записей до тех пор, пока текущая транзакция не будет зафиксирована или прервана. То есть записи могут поступать только в том случае, если они имеют правильное сходство транзакций и участвуют в текущей транзакции.

Читатели не блокируются. Однако данные, которые читатели видят, не отражают промежуточные изменения, внесенные в транзакцию, пока эта транзакция фактически не фиксируется. Все компоненты, участвующие в этой транзакции, видят промежуточные состояния данных при чтении данных, но все компоненты за пределами транзакции видят эти изменения только после завершения транзакции.

Поведение SaveChanges

Чтобы обеспечить поведение изоляции, описанное выше, RegDB эффективно предоставляет кэш, который действует с помощью компонентов в транзакции. Это изменяет поведение метода SaveChanges.

Как правило, без наличия транзакции все ожидающие изменения записываются в каталог при вызове SaveChanges, и SaveChanges не возвращается до завершения всех операций записи. Это гарантирует, что если вызов SaveChanges возвращается успешно, можно вызвать StartApplication и активировать приложение с свежими данными.

Однако в рамках транзакции SaveChanges влияет только на кэш, а не сам RegDB, и SaveChanges сразу же возвращает, были ли все изменения транзакционно зафиксированы в RegDB. Нет никаких гарантий, что StartApplication использует свежие данные после возврата SaveChanges . Если необходимо вызвать StartApplication в этом контексте, рекомендуется подождать некоторое время, прежде чем это сделать.

Период времени ожидания транзакции

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

Ресурсы каталога, отличные от транзакций COM+

Реестр, файловая система и установщик Windows (MSI) — это ресурсы каталога COM+, которые не являются транзакционных.

Примечание.

Если возникает ошибка, которая прерывает транзакцию, изменения этих ресурсов могут не быть откатированы.

 

Если во время установки существующего приложения COM+ из .msi файла возникает ошибка, приложение не отображается в оснастке "Службы компонентов", но оно может отображаться в программах "Добавление и удаление", в этом случае необходимо вручную удалить его.

Восстановление в событиях системных зависаний

Если компонент, выполняющий операции администрирования в рамках транзакции, зависает, пока он хранит блокировку записи на коде сервера каталога, он заблокирует все остальные изменения в каталоге. Если это произойдет, вы можете очистить блокировку каталога, завершив работу и перезагрузив системное приложение.

Скриптирование с помощью объекта TransactionContext

Простой способ выполнения операций администрирования в транзакциях — использовать объект TransactionContext для управления транзакцией. Например, следующий скрипт Visual Basic демонстрирует, как транзакционно добавлять два новых приложения, чтобы оба приложения или ни одно приложение не создавалось:

Dim txctx
Dim cat
Dim apps
Dim app1
Dim app2
  
WScript.Echo "Starting"
Set txctx = CreateObject("TxCtx.TransactionContext")
Set cat = txctx.CreateInstance("COMAdmin.COMAdminCatalog")
Set apps = cat.GetCollection("Applications")
Set app1 = apps.Add
app1.Value("Name") = "Test App #1"
apps.SaveChanges
Set app2 = apps.Add
app2.Value("Name") = "Test App #2"
apps.SaveChanges
  
WScript.Echo "Ending"
txctx.Commit

Обработка ошибок com+ Администратор istration

Вводный пример использования каталога COM+ Администратор istration

Обзор объектов COM Администратор

Получение коллекций в каталоге COM+

Настройка свойств и сохранение изменений в каталоге COM+