zoukankan      html  css  js  c++  java
  • asp.net服务组件自动事务处理

    代码实现:

    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如果正常返回,则事务自动提交(SetComplete),否则中止事务(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

  • 相关阅读:
    3139:[HNOI2013]比赛
    3143: [Hnoi2013]游走
    目前游戏行业内部主要几款游戏引擎的技术对比
    6.使用AngularJS模板来创建视图
    css选择器(E[att^=”val”]序号选择器)
    5.把作用域实现为数据模型
    4.了解AngularJS模块和依赖注入
    3.创建基本的AngularJS应用
    2.AngularJS MVC
    1.AngularJS初探
  • 原文地址:https://www.cnblogs.com/zuoguanglin/p/2489670.html
Copyright © 2011-2022 走看看