Let other users know how useful this tip is by rating it below. Got a tip or code of your own you'd like to share? Submit it here.
Two or more .NET Framework objects can participate in the same transaction. One or more .NET Framework objects can participate in the same transaction as one or more COM+ objects. All objects must be hosted in Microsoft Windows 2000 Component Services so as to receive services such as transaction processing.
There are several considerations you must address in designing transactions that span COM+ and .NET Framework objects. For example, in order for a .NET Framework object to participate in an automatic transaction, the .NET Framework class must be registered with Window 2000 Component Services. However, not all transactions are automatic. The activities you perform when programming transactions depend on the transaction model you choose.
Microsoft Transaction Server (MTS), COM+ and the Common Language Runtime (CLR) support the same automatic, distributed transaction model.
Once an ASP.NET page, WebMethod or .NET Framework class is marked to participate in a transaction, it will automatically execute within the scope of a transaction. You can control an object's transactional behavior by setting a transaction attribute value on the page, WebMethod or class. The attribute value, in turn, determines the transactional behavior of the instantiated object.
Thus, based on the declared attribute value, an object will automatically participate in an existing or ongoing transaction, be the root of a new transaction, or never participate in a transaction at all. The ASP.NET framework supports automatic transactions on Windows 2000. By inserting a transaction directive into your ASP.NET page, you can instruct the page to participate in an existing transaction, begin a new transaction or never participate in a transaction.
The table below lists and describes the transaction directives available in ASP.NET.
|NotSupported||This value indicates that the page does not run within the scope of transactions. When a request is processed, its object context is created without a transaction, regardless of whether there is a transaction active.|
|Supported||The page will run in the context of an existing transaction, if one exists. If not, it will run without a transaction.|
|Required||The page requires a transaction. It will run in the context of an existing transaction, if one exists. If not, it will start one.|
|RequiresNew||The page requires a transaction and a new transaction will be started for each request.|
You can indicate the level of transaction support on a page by placing the directive in your code. For example, you can ensure that the page activities always execute in the scope of a transaction by inserting the following directive:
<%@ Page Transaction="Required" %>
The default transaction state is None, which indicates that the transaction context will be ignored by the ASP.NET framework. There is no explicit directive for this value; in other words, you cannot add page Transaction="None" to your page. Instead, simply omit the transaction directive to apply the default value.
This was first published in March 2003