Danh mục

Creating a Class That Participates in an Automatic Transaction

Số trang: 5      Loại file: pdf      Dung lượng: 27.91 KB      Lượt xem: 10      Lượt tải: 0    
Hoai.2512

Hỗ trợ phí lưu trữ khi tải xuống: miễn phí Tải xuống file đầy đủ (5 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

[ Team LiB ] Recipe 6.1 Creating a Class That Participates in an Automatic Transaction Problem You need to create a .NET class that participates in automatic transactions. Solution Use the appropriate custom attributes from the System.EnterpriseServices namespace.
Nội dung trích xuất từ tài liệu:
Creating a Class That Participates in an Automatic Transaction[ Team LiB ]Recipe 6.1 Creating a Class That Participates in an Automatic TransactionProblemYou need to create a .NET class that participates in automatic transactions.SolutionUse the appropriate custom attributes from the System.EnterpriseServices namespace.The sample contains a component that participates in automatic transactions. Thecomponent has a single method, TranTest( ) , that instructs the transaction to succeed orfail based on an argument success.The sample also contains code that instantiates the component that participates in theautomatic transaction. A checkbox on the form is used to specify the success parameterwhen the TranTest( ) method is called.The C# code is shown in Examples Example 6-1 and Example 6-2.Example 6-1. ServicedComponentCS Project File: SC0601.cs// Namespaces, variables, and constantsusing System.EnterpriseServices;using System.Runtime.CompilerServices;using System.Reflection;// . . .namespace AdoDotNetCookbookCS.ServicedComponentCS{ [Transaction(TransactionOption.Required)] public class SC0601 : ServicedComponent { [AutoComplete] public void TranTest(bool success) { // . . . Do some work. if(success) { // dont need the next line since AutoComplete // ContextUtil.SetComplete( ); } else { // Vote to abort. ContextUtil.SetAbort( ); // Raise an exception. throw new System.Exception( Error in Serviced Component 0601. + Transaction aborted.); } } }}Example 6-2. File: AutoTransactionForm.cs// Namespaces, variables, and constantsusing System;using System.Windows.Forms;using AdoDotNetCookbookCS.ServicedComponentCS;// . . .SC0601 sc = new SC0601( );try{ sc.TranTest(transactionSucceedCheckBox.Checked); MessageBox.Show(Transaction successful., Automatic Transactions, MessageBoxButtons.OK, MessageBoxIcon.Information);}catch(Exception ex){ MessageBox.Show(ex.Message, Automatic Transactions, MessageBoxButtons.OK, MessageBoxIcon.Error);}DiscussionThe .NET Common Language Runtime (CLR) supports both manual and automatictransaction models. The automatic distributed transaction model supported by the .NETCLR is the same as that supported by Microsoft Transaction Server (MTS) and COM+.The .NET Framework provides support for transactional components through theEnterpriseServices namespace that provides .NET objects with access to COM+ services.There are two key benefits to automatic transactions: • They support distributed transactions that span multiple remote databases and multiple resource managers. • Objects participating in automatic transactions do not need to anticipate how they might be used within a transaction. A client can perform different tasks with multiple objects, all in the context of a single transaction, without the participating objects being aware of the transaction.The main drawback is: • Additional overhead because of the interaction with the Distributed Transaction Coordinator (DTC) and the resulting reduction in performance.During the lifetime of an automatic transaction, the objects participating in it can vote toeither commit the transaction they are participating in by calling the static SetComplete( )method of the ContextUtil class or to abort the transaction by calling the static SetAbort() method of the ContextUtil class. In the absence of an explicit vote, the default is tocommit the transaction. The transaction is committed once it completes if none of theparticipating objects have voted to abort.Alternatively, you can apply the AutoCompleteAttribute attribute to a transactionalmethod. This attribute instructs .NET to vote to commit the transaction, provided noexceptions are encountered in the method. If an unhandled exception is thrown, thetransaction is automatically rolled back.The .NET Framework classes must be prepared before they can participate in anautomatic transaction. Once an object is marked to participate in a transaction, it willautomatically execute within a transaction. The objects transactional behavior iscontrolled by the value of the transaction attribute for the .NET class, ASP.NET page, orXML web service method using the object. This allows the instantiated object to beconfigured programmatically to participate automatically in an existing transaction, tostart a new transaction, or to not participate in a transaction. The following steps preparea class to participate in an automatic transaction: 1. Derive the class from the ServicedComponent class in the System.EnterprisesServices namespace. 2. Apply the declarative TransactionAttribute to the ...

Tài liệu được xem nhiều: