当前位置: 代码迷 >> .NET Framework >> 关于Oracle 跟SQL Server的TransactionScope的疑惑
  详细解决方案

关于Oracle 跟SQL Server的TransactionScope的疑惑

热度:152   发布时间:2016-05-01 23:31:32.0
关于Oracle 和SQL Server的TransactionScope的疑惑
先来看一段oracle的transactionscope.
 protected void Button1_Click(object sender, EventArgs e)
        {
            using (var ts = new TransactionScope())
            {
                OracleHelper.ExcuteNonQuery("insert into jsontest values ('test12') ");
                OracleHelper.ExcuteNonQuery("insert into jsontest values ('test12') ");
                OracleHelper.ExcuteNonQuery("insert into jsontest values ('test12') ");
                //throw new Exception("ex");
                OracleHelper.ExcuteNonQuery("insert into jsontest values ('test12') ");
                OracleHelper.ExcuteNonQuery("insert into jsontest values ('test12') ");
                TmsOracleHelper.ExcuteNonQuery("insert into JSONTESTTMS values ('test12') ");
                TmsOracleHelper.ExcuteNonQuery("insert into JSONTESTTMS values ('test12') ");
                TmsOracleHelper.ExcuteNonQuery("insert into JSONTESTTMS values ('test12') ");
                //throw new Exception("ex");
                TmsOracleHelper.ExcuteNonQuery("insert into JSONTESTTMS values ('test12') ");
                TmsOracleHelper.ExcuteNonQuery("insert into JSONTESTTMS values ('test12') ");
                ts.Complete();
            }
        }


这里面用transactionscope.只需要在AP开启oracle服务OracleMTSRecoveryService.
无需对DB和AP进行额外设定(当然DB也得开启OracleMTSRecoveryService)。

问题来了。
SQL Server 没找到类似的服务!使用TransactionScope除了msdtc的service要开启外,
还需要开启DB和AP的remote mdtc inbond和outbound权限。
而这个component service的设定是os默认没有开启的!
公司N多AP和DB,如果要设定会非常的麻烦。
而且SE不愿意"冒险"修改.

请教一下大神,
还有什么其他的方法可以实现分布式事务而又不需要开启远程msdtc权限的吗?

    using (var ts = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromMinutes(10)))
             {
            try
            {
                CommonHelper.InsertTicketdtl(ticketdtl);
                CommonHelper.GenerateSignlistByUserId(ticketdtl.DamagerID, ticketdtl.Grno, txtSignComment.Text);
                CommonHelper.InsertAFC_Flow(afc_flow);
                CommonHelper.InsertAFC_AccountSignHistory(AFC_AccountSignHistory);
                CommonHelper.SendMail(SendMail);
                CommonHelper.Msgbox("提交成功!單據號:" + ticketdtl.Grno);
                CommonHelper.ActionComplete();

                  ts.Complete();
            }
            catch (Exception ex)
            {
                _msg = ticketdtl.Grno + ex.Message.ToString();
                CommonHelper.Msgbox("提交失敗!請重試!");
            };
             };




------解决思路----------------------
TransactionScope必须在配置了MSDTC之后才能实现分布式事务处理
  相关解决方案