Hello Transaction,事务.

Dot net 2.0新增了事务空间
System.Transactions

最先了解事务是在MSSQL中.
通常处理多个SQL语句,为了保证全部完成,采用事务运行的方式.
运用SQL的事务处理,如果出现错误,事务回滚,恢复到原来状态(Failure Recovery).

现在微软提供这么一个空间帮助我们更简单的,更有效率的建立我们的事务程序.

那么什么是事务呢?
比如:
我先导入一条数据,接着发送一封邮件给其他人.
这样分解开来:
1.导入数据
2.发送邮件.

那么我申明一个事务范围:
 using (TransactionScope scope = new TransactionScope())
            
{
                
try
                
{
                    
//some code to do something
sql.add();
mail.send();
                }

                
catch (Exception ex)
                
{
                    
                   
//
                }

               scope.Complete();


            }
这样,当所有的事务范围类的动作全部正确完成,则事务全部完成,否则,所有动作进行回滚.

这样好像给我们一个错觉,什么动作都可以放在事务中么?出错都会回滚么?
不是这样的,必须由资源控制器来完成状态记录和出错后的状态恢复.
在这个例子中:
MSSQL就是资源控制者(Resource Manager),邮件服务器则是另一个Resource Manager.

实际上邮件本身是不支持事务,因此要定义它的Resource Manager,怎么做它的失败恢复呢?
发了错误的邮件,那么只有再发一封邮件来说前一封是错误的,再把正确的信息发出去.



至于,Resource Manager是如何跟Resouce 关联上来的,我还没有搞清楚.

注意的是需要添加System.Transactions.dll才会出现新的命名空间.
操作系统平台需要windows 2000以上支持.

阅读文章:
Transaction 概要
http://msdn2.microsoft.com/en-us/library/system.transactions.aspx
完成一个资源控制器
http://msdn2.microsoft.com/en-us/library/ms229975.aspx
使用事务范围完成一个隐含的事务
http://msdn2.microsoft.com/en-us/library/ms172152.aspx

posted on 2006-10-12 22:51  一望无际的南  阅读(242)  评论(0编辑  收藏  举报

导航