COM+事务应用,在分布式应用程序中,同时操作多个不同数据库

在分布式应用程序中,往往要同时操作多个数据库,使用数据库事务就不能满足业务的要求了。在COM+中,提供完整的事务处理服务。很方便处理多个数据库上的事务。

前提:
l         需要强名字;需要用RegSvcs2.0.exe,进行注册;需要开启相关的服务。
l         使用事务的对象需要继承ServicedComponent。
优势:
l         执行分布式事务,多个对象可以轻松地运行在同一个事务处理中,事务处理还可以自动登记。
l         获得COM+服务,诸如对象构建和对象池等。

缺点:
l         由于存在 DTC 和 COM 互操作性开销,导致性能降低。
l         使用Enterprise Services的事务总是线程安全的, 也就是说你无法让多个线程参与到同一个事务中。

下面来看下一段代码:

ContractedBlock.gif ExpandedBlockStart.gif 代码一
 
      
[Transaction(TransactionOption.Required)]
public class OrderBR : ServicedComponent
{
public OrderBR()
{
}

[AutoComplete]
public void AddAndDelete(_Tables t)
{
Thread thread
= new Thread( new ThreadStart( delegate { AddDelete(t); }));
thread.Priority
= ThreadPriority.Highest;
thread.Start();
}
public void AddDelete(_Tables t)
{
Warp warp
= new Warp();
warp.Add(t);
Thread.Sleep(
60000 );
warp.Delete(t.name);
}

}

首先类必须继承ServicedComponent,属性值可为:Disabled,忽略当前上下文中的任何事务;NotSupported,使用非受控事务在上下文中创建组件;Required,如果事务存在则共享事务,并且如有必要则创建新事务;RequiresNew,使用新事务创建组件,而与当前上下文的状态无关;Supported,如果事务存在,则共享该事务。

方法属性值可声明为AutoComplete/[AutoComplete(false)]。

COM+事务有手动处理和自动处理两种方式,自动处理就是在所需要自动处理的方法前加上[AutoComplete],根据方法的正常或抛出异常决定提交或回滚。手动处理就是调用ContextUtil类中的EnableCommit、SetComplete和SetAbort方法。

本方法主要是先插入数据再通过线程间隔删除数据,在这个间隔时间里,可以尝试停止数据库服务,特意引发异常。当你重新启动数据库服务时,数据就会自动回滚。刚插入的数据虽然在SQL server Profiler 监控中是成功的.

下面是监控的截图:

2011012321461064.jpg

好了,这次就介绍到这里。欢迎大家指正,及交流。源码下载地址:http://files.cnblogs.com/howzanh/Com_Demo.zip

posted on 2011-01-23 22:01 一路->向前 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/howzanh/archive/2011/01/23/COM-ServicedComponent.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值