asp.Netサービスコンポーネント-自動トランザクション

3760 ワード

コード実装:
using System;
using System.Data.SqlClient;
using System.EnterpriseServices;
using System.Reflection;

namespace ComponentServiceModel
{
    [assembly: ApplicationName("ComponentTransaction")]
    [Transaction(TransactionOption.Required)]
    public class TransactionExample : ServicedComponent
    {
        public TransactionExample()
        {
            
        }

        [AutoComplete(true)]
        public bool WriteData(string commandText,string commandText1)
        {
            try
            {
                //do something in different database
                ContextUtil.SetComplete();
                return true;
            }
            catch
            {
                ContextUtil.SetAbort();
                return false;
            }
        }
    }
}

黒体の寸法の部分はタイプに必要な特殊な属性です.その中でtry...catch文ブロックは必須ではなく、WriteDataメソッドで通常のコードを記述し、これらのコードに異常が発生しないと仮定することができます.つまり、ContextUtilを手動で呼び出す必要はありません.SetComplete()とContextUtil.SetAbort();.次のコードのように:
        [AutoComplete(true)]
        public bool WriteData(string commandText,string commandText1)
        {
                //do something in different database
        }

実際の実行時に呼び出しに異常が発生すると、WriteDataはContextUtilを自動的に呼び出す.SetAbort()は、逆に呼び出しに異常がない場合、WriteDataはContextUtilを自動的に呼び出す.SetComplete()は、トランザクションを完了します.
ヒント:
トランザクションのタイムアウト時間を指定する必要がある場合は、次のコードでタイプを識別できます.
       [Transaction(TransactionOption.Required, Isolation=TransactionIsolationLevel.Serializable, Timeout=10)] 
AutoCompleteプロパティを使用してメソッドをタグ付けする場合、AutoCompleteを[AutoComplete(false)]に指定するか、無視する場合は、次のコードに示すようにトランザクションを手動で管理する必要があります.
 
    [AutoComplete(false)]
    public bool WriteData(string commandText, string commandText1)
    {
        try
        {
            //do something in different database
            ContextUtil.SetComplete();
            return true;
        }
        catch
        {
            ContextUtil.SetAbort();
            return false;
        }
    }

関連タイプの説明:
1、[Transaction(TransactionOption.Required)]
プロパティTransactionトランザクションコンポーネントとして識別TransactionExample
2、[AutoComplete]
プロパティAutoCompleteは、メソッドWriteDataが正常に返された場合、トランザクションが自動的にコミットされ、そうでなければトランザクションが中止されることを識別するために使用されます(SetAbort).
プロパティTransactionとAutoCompleteの詳細については、MSDNを参照してください.
       Transaction
       http://msdn2.microsoft.com/zh-cn/library/system.enterpriseservices.transactionattribute(VS.80).aspx
       AutoComplete
       http://msdn2.microsoft.com/zh-cn/library/system.enterpriseservices.autocompleteattribute(VS.80).aspx