先来看一段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之后才能实现分布式事务处理