在 System.EnterpriseServices 名称空间中实现了COM+服务的相关类,其中就提供事务支持。
你可以在你的方法上加上TransactionAttribute特性标记,那个方法就支持事务了。
然后在那个方法中就可以用ContextUtil.SetComplete()和ContextUtil.SetAbort()方法分别表示事务的Commit和Rollback。
另外你还可以用AutoCompleteAttribute来标记一个支持事务的方法,那样当方法正常结束时,就会自动递交事务,否则如果出现异常将自动取消事务。
要做到Web Service 事务, 你可能需要使Web Service 实现两阶段提交, 这样的话, 可以在本地失败的时候, 回滚 Web Service 操作, 当然这样做你必须在事务和效率上作出取舍, 如果只是简单的类原子操作, 事务并非最佳选择, 象你所提到的这个操作, 如果只是单一的写本地和修改,而不涉及批量操作的, 可以在自己的本地事务中, 把WebService修改操作放到最后一步去做。。。
WebServices 的事务使用的是 COM+ 的事务。
[WebMethod(TransactionOption=TransactionOption.Required)]
[AutoComplete]
public String TestCom(){
SqlConnection conn = new SqlConnection("data source=(local);initial catalog=Northwind;user id=sa;password=sa;");
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "insert test select getDate()";
ContextUtil.EnableCommit();
conn.Open();
cmd.ExecuteNonQuery();
//ContextUtil.SetAbort();
conn.Close();
conn.Dispose();
return "更新成功!!!!";
}