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

Определение транзакционной поддержки

Определение транзакционной поддержки

Ранее при использовании транзакций из служб COM+ можно было увидеть настройку уровня транзакций в окне свойств класса в Snap-In службы компонентов. Эта настройка позволяет задать уровень поддержки транзакций, который службы COM+ будут предоставлять стандартному компоненту COM.


Иначе в .NET уровень поддержки транзакций в сборке можно определить не с помощью графического окна в snap-in службы компонентов, а программным путем с помощью атрибута Transaction, определенного в пространстве имен EnterpriseServices. В примере ниже мы определяем, что следующий класс прокси должен поддерживать транзакции. При заданном значении атрибута компонент будет сконфигурирован для поддержки транзакций, когда он импортируется в службы COM+ с помощью RegSvcs.exe.

[Transaction(TransactionOption.Supported)]
public class ProxyClass:ServicedComponent {
}
Supported
является только одним из нескольких значений, которые можно присвоить атрибуту Transaction компонента. Фактически, существует четыре значения, которые представлены в перечислении TransactionOption, являющемся частью пространства имен System.EnterpriseServices.

? Когда атрибут Transaction класса задан как Disabled, службы COM+ не предоставляют транзакционной поддержки для класса, даже если такая поддержка определена где-то в коде. (Другими словами, вызовы этого класса, сделанные для ContextUtil с целью фиксации или отмены транзакций, игнорируются. Мы познакомимся с ContextUtil в следующем разделе.)

? Когда атрибут Transaction класса задан как NotSupported, такой класс не вовлекается в транзакции, запускаемые его клиентами, другими словами он не помещается в их контекст. В данной конфигурации объекты этого класса не определяют, будет ли вызываемая транзакция фиксироваться или отменяться.

? Когда атрибут Transaction класса задан как Supported, объекты этого класса могут вовлекаться в контекст транзакций своих вызывающих клиентов, если эти вызывающие клиенты на самом деле начинают транзакцию. Такой объект не может самостоятельно порождать транзакцию.

? Когда атрибут Transaction класса задан как Required, службы COM+ знают, что объекты этого класса могут выполняться только в контексте транзакции. Если такой объект вызывается клиентом, имеющем транзакционный контекст, объект наследует контекст транзакции клиента. Если, однако, объект вызывается клиентом, который не имеет транзакционного контекста, службы COM+ создают контекст для этого объекта.

? Когда атрибут Transaction класса задан как RequiresNew, службы COM+ создают новую транзакцию для класса каждый раз, когда он вызывается. Даже если клиент объекта уже имеет транзакцию, службы COM+ создают новую транзакцию для серверного объекта. Как можно догадаться, классы, сконфигурированные подобным образом, способны отменить только свои собственные транзакции, а не работу своих клиентов.

На практике большинство разработчиков используют только одну или две из этих настроек. Значение Supported подходит для классов типа класса Settings , которому нужно будет обслуживать классы с транзакциями и без транзакций. Для большинства других транзакционных классов можно справиться, задавая значение Required. Однако все-таки может возникнуть ситуация, где потребуются одно или несколько составных значений, дополнительную информацию можно найти в книге "Professinal Windows DNA Programming" (ISBN 1-861004-45-1) издательства Wrox Press.

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


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