Web Service事务处理

此处讲的主要是Com+事务,而不是Ado.net中的事务.由于Http的无状态性,用到事务时是有一些限制的,比如Web method必须是根对象,也就是说事务的代码必须在一个方法中,而不能2个方法参与在一个事务中..

启用事务的步骤:

  1. 添加System.EnterpriseServices程序集的引用.
  2. 给WebMethod特性添加TransactionOption=TransactionOption.RequiresNew

事务提交的时机:

在方法顺利执行完后事务自动提交,包括发生了异常但是已经catch了,仍然会提交事务.

事务回滚的时机:

  1. 有异常发生并且未处理
  2. 主动回滚,通过调用ContexttUtil.SetAbort()方法来达到.

代码片段为:

public void Update()

{

SqlConnection conn= new SqlConnection(connstr);

SqlCommand cmd = new SqlCommand("delete table",conn);

try{

conn.Open();

cmd.ExecuteNonQuery();

FileStream fs =new FileStream("does not exist file",FileMode,Open);

}

catch

{

}

这样虽然打开文件时,文件不存在会产生异常,但已经catch了,所以表中的数据仍然会删掉.如果去掉catch那么表中的数据就不会被删掉,或者在catch块中加上ContextUtil.SetAbort()也会回滚事务,表中的数据也不会被删除.

posted @ 2010-01-13 14:17  CodeWorker  阅读(448)  评论(0编辑  收藏  举报