【发布时间】:2013-07-12 19:57:49
【问题描述】:
假设我尝试发送到经过身份验证的事务队列,
通过调用msg.send(object,MessageQueueTransactionType.Single),事务队列中没有收到消息,没有抛出异常。
我想要完成的是发送后,如果消息发送失败,执行一些功能并中止事务,但它没有抛出异常,所以我无法处理它。 p>
我正在从本地消息队列中的 Web 应用程序发送对象。
我的网络应用程序中的代码如下:
MessageQueueTransaction mqTran=new MessageQueueTransaction();
try
{
using(System.Messaging.Message msg=new System.Messaging.Message(){
mqTran.Begin();
MessageQueue adminQ = new MessageQueue(AdminQueuePath);
MessageQueue msgQ = new MessageQueue(queuePath);
msgQ.DefaultPropertiesToSend.Recoverable = true;
msg.body = object;
msg.Recoverable=true;
msg.Label="Object";
msg.TimeToReachQueue=new TimeSpan(0,0,30);
msg.AcknowledgeType=AcknowledgeTypes.FullReachQueue;
msg.ResponseQueue=adminQ;
msg.AdministrationQueue=adminQ;
msgQ1.Send(msg,MessageQueueTransactionType.Single);
mqTran.Commit();
}
catch(Exception e)
{
mqTran.Abort();
//Do some processing if fail to send
}
【问题讨论】:
-
“我正在从本地的 Web 应用程序向本地消息队列发送对象。”这是否意味着发送应用和接收队列在同一台机器上?
-
是的,它们在同一台机器上,所以我应该实现 MSMQ 还是生成我自己生成的队列类?
-
MSMQ 没问题。只是底层过程非常不同。例如,没有传出队列。 Send() 会将消息直接放入目标队列,而不是放入中间传出队列以进行转发。如果发送失败,您将立即获得异常返回。你的 try/catch 应该在 send() 附近。
标签: msmq