MSMQ消息队列读消息问题

bulargue 2010-03-23 09:57:03
MessageQueue myQueue = new MessageQueue(".\\private$\\myQueue1");
myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
if (myQueue.Transactional)
{
MessageQueueTransaction myTransaction = new MessageQueueTransaction();
try
{
//启动事务
myTransaction.Begin();
//从队列中接收消息
System.Messaging.Message myMessage = myQueue.Receive(myTransaction);
SqlConnection conn = new SqlConnection("Data Source=THTFCOMPUTER\\MSSQLSERVER1;Initial Catalog=test;Integrated Security=True;User Id=sa; Password=sa;");
SqlCommand cmd = new SqlCommand();
string sql = myMessage.Label;
cmd.CommandText = sql;
cmd.Connection = conn;
conn.Open();

cmd.ExecuteNonQuery();
conn.Close();
myTransaction.Commit();
}
catch
{
myTransaction.Abort();
}
}


这样写有什么问题么?执行的时候只提取消息队列中第一条消息后就不继续执行了,

如果提取消息成功,执行的过程中出错,如何回滚出错的那条消息?
...全文
190 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bestdowt1314 2010-03-23
  • 打赏
  • 举报
回复
友情帮顶,最近自己也想用到消息队列的技术
bulargue 2010-03-23
  • 打赏
  • 举报
回复
大虾们帮帮忙 谢谢各位了
bulargue 2010-03-23
  • 打赏
  • 举报
回复
问题已经解决

MessageQueue queue = new MessageQueue(".\\private$\\myQueue1", true);
MessageQueueTransaction transaction = new MessageQueueTransaction();

try
{
queue.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) }); ;
int len = queue.GetAllMessages().Length;
// Receive message, 同步的Receive方法阻塞当前执行线程,直到一个message可以得到
while (len > 0)
{
if (queue.Transactional)
transaction.Begin();
System.Messaging.Message message = queue.Receive(new TimeSpan(0), transaction);

SqlConnection conn = new SqlConnection("Data Source=THTFCOMPUTER\\MSSQLSERVER1;Initial Catalog=test;Integrated Security=True;User Id=sa; Password=sa;");
SqlCommand cmd = new SqlCommand();
string sql = message.Body.ToString();
cmd.CommandText = sql;
cmd.Connection = conn;
conn.Open();

cmd.ExecuteNonQuery();
conn.Close();

// 如果消息队列采用了事务,则停止事务
if (queue.Transactional)
{
transaction.Commit();
len--;
}
}
}
catch
{
if (queue.Transactional)
transaction.Abort();
}
finally
{
queue.Close();
queue.Dispose();
}

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧