asp.net 分布式事务之TransactionScope
直入主题,用于测试的表间关系如下:
C#代码如下:
/// <summary> /// 连接字符串 /// </summary> private static string _conStr = "server=AB0IB3JZBZAZHQI;database=Test;uid=sa;pwd=sa;"; /// <summary> /// TransactionScope /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnTransactionScope_Click(object sender, EventArgs e) { using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required)) { bool isSuccessful = CreateGrade() && CreateUser(); if (isSuccessful) ts.Complete(); } } /// <summary> /// 添加年级 /// </summary> /// <returns></returns> private bool CreateGrade() { SqlConnection conn = new SqlConnection(_conStr); try { SqlCommand cmd = new SqlCommand("insert into Grade values(‘S1‘,‘1‘)", conn); conn.Open(); return cmd.ExecuteNonQuery() > 0; } catch (Exception) { return false; } finally { conn.Close(); } } /// <summary> /// 添加用户 /// </summary> /// <returns></returns> private bool CreateUser() { SqlConnection conn = new SqlConnection(_conStr); try { SqlCommand cmd = new SqlCommand("insert into [User] values(‘ray‘,‘[email protected]‘,‘fs‘,2)", conn); conn.Open(); return cmd.ExecuteNonQuery() > 0; } catch (Exception) { return false; } finally { conn.Close(); } }
在本地测试,无任何问题,CreateGrade插入成功,CreateUser()插入失败,查询数据库发现最终无任何数据。
将网站发布到IIS上,让其它用户访问,要保证事物能够起作用,我们还必须设置MSDTC.Win
7 的设置我们可以参考如下链接:http://a.th7.cn/?l=3&ref=www_iphone&order=2&dict=22&tj=www_normal_2_0_10&cltj=cloud_title&src=http%3A%2F%2Fwww.th7.cn%2FProgram%2Fnet%2F2012%2F05%2F02%2F73061.shtml。
在于此中的操作步骤的我啰嗦一点:防火墙设置。
运行firewall打开防火墙
点击此按钮添加msdtc.exe 如下图所示:
除此之外,还要将你的网站的端口(比如我的为5566)对外开放,点击防火墙,高级设置,如下图所示:
然后下一步。完成即可。以上设置,网站和数据库在同一服务器。若二者不在同一服务器,则需要分别做次设置。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。