【发布时间】:2010-08-23 21:07:27
【问题描述】:
如果队列管理器关闭,我有一个问题,即 MQQueueManager 构造函数的调用挂起。
当我调用 MQQueueManager 的构造函数时,我使用 EnterpriseOptions.Full 打开了一个 TransactionScope。如果 MQ 已关闭(或可能在 QM 关闭时尝试连接),则此调用将挂起。即使事务过期也不会在事务中引发超时异常。
如果我在进行连接时没有打开事务范围,那么在那之后我将永远无法让 MQQueueManager 参与事务。
所以,如果 MQ 可以关闭(确实如此......),当我建立连接时,如何阻止队列挂起。我正在使用 MQ 6.0.2.5 中的托管客户端。
我添加了一些代码以使问题更清楚:
TransactionOptions opt = new TransactionOptions();
opt.IsolationLevel = IsolationLevel.Serializable;
opt.Timeout = new TimeSpan(0, 0, 20);
TransactionScopeOption ScopeOption = TransactionScopeOption.Required;
using (TransactionScope tran =
new TransactionScope
(ScopeOption,
opt,
EnterpriseServicesInteropOption.Full))
{
//This line hangs if MQ is down, doesn't backout or throw a 2059.
var m_qMgr = new MQQueueManager(QueueManager, Channel, Hostname);
tran.Complete();
}
【问题讨论】:
-
你能发布一些代码吗?如果我尝试将构造函数调用到 MQQueueManager 并且 Qmgr 停止,我得到一个 2059,根本没有超时。我不确定您所说的 TransactionScope 和 EnterpriseOptions.Full 是什么意思。在 Bing 上搜索会显示此主题,仅此而已。
-
我在 windows 中使用事务。 2059 的 MQ 写入按预期工作,除非它包含在事务中。我可能会在周一上班时删除代码。
标签: c# transactions ibm-mq