【发布时间】:2017-10-11 13:05:40
【问题描述】:
我有一个 WebSphere MQ 和我的 Oracle 数据库。我从 MQ 获取消息并将它们写入数据库。目前是用这段代码完成的:
private MQHandler _mqHandler;
private OracleDBConnector _db;
private OracleDBUtils _dbUtil;
_db = new OracleConnection();
_db.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
_db.Open();
try
{
using (TransactionScope tran = new TransactionScope())
{
_db.BeginTransaction();
//read from Queue
oMqResult = _mqHandler.ReadTransactionQMsg(sChannelName);
//write into database and some other magic
........
if (noError) {
// Commit queue
_mqHandler.Commit();
// Commit database
_db.Commit();
// Commit transactionscope
tran.Complete();
}
}
}
catch (Exception ex)
{
_mqHandler.Backout();
_db.Rollback();
}
如果没有异常发生,一切正常。但我的问题是:当_mqHandler.Commit(); 工作正常然后_db.Commit(); 失败时会发生什么? TransactionScope 在这个例子中究竟是如何工作的?这个 tran-Object 可以提交和回滚队列和数据库吗?
【问题讨论】:
-
我认为您应该阅读一些有关 XA(分布式事务)的内容。