在ASP.NET中进行消息处理(MSMQ) 二
[index].Label;
20 string body = messages[index].Body.ToString();
21 string priority = messages[index].Priority.ToString();
22
23 messageTable.Rows.Add(new string[] { label, body, priority });
24 }
25 this.dgvMessage.DataSource = messageTable;
26 }
27 catch (MessageQueueException e1)
28 {
29 MessageBox.Show(e1.Message);
30 }
31 }
32 }
这里封装了一方法,专门负责从队列里读取全部消息并绑定在DataGridView控件上,这里我们只需要在按扭Click事件里调用这方法就OK。 1private void btnRec_Click(object sender, EventArgs e) 2{ 3 DisplayMessage(); 4} 这就完成了给消息设置优先级的消息传输的应用,最终的测试结果如下: 注:要完成以上应用还需注意一点,由于消息的优先级是枚举类型,在直接messages[index].Priority.ToString();这种方式来获取优先级转化到字符串的时候,他需要一个过滤器(Filter),否则会抛出一个InvalidCastExceptionle类型的异常,异常信息"接收消息时未检索到属性 Priority。请确保正确设置了 PropertyFilter。",要解决这问题只需要把消息对象的MessageReadPropertyFilter(过滤器) 的Priority设置为true就OK了。见上面代码里!^.^ MessagePriority枚举源代码定义详细如下: 1// 摘要: 2// 指定消息队列在消息传递到队列的过程中应用于该消息的优先级,以及指定何时将消息插入目标队列。 3public enum MessagePriority 4{ 5 // 摘要: 6 // 最低消息优先级。 7 Lowest = 0, 8 // 9 // 摘要: 10 // 位于 Low 和 Lowest 消息优先级之间。 11 VeryLow = 1, 12 // 13 // 摘要: 14 // 低消息优先级。 15 Low = 2, 16 // 17 // 摘要: 18 // 普通消息优先级。 19 Normal = 3, 20 // 21 // 摘要: 22 // 位于 System.Messaging.MessagePriority.High 和 System.Messaging.MessagePriority.Normal 23 // 消息优先级之间。 24 AboveNormal = 4, 25 // 26 // 摘要: 27 // 高消息优先级。 28 High = 5, 29 // 30 // 摘要: 31 // 位于 Highest 和 High 消息优先级之间。 32 VeryHigh = 6, 33 // 34 // 摘要: 35 // 最高消息优先级。 36 Highest = 7, 37} 二、事务性消息处理 事务我想大家对这个词应该都不会陌生,在操作数据库的时候经常都会用到事务,确保操作成功,要么全部完成(成功),要么全部不完成(失败)。在MSMQ中利用事务性处理,可以确保事务中的消息按照顺序传送,只传送一次,并且从目的队列成功地被检索。 那么,在MSMQ上使用事务性处理怎么实现呢?可以通过创建MessageQueueTransation类的实例并将其关联到MessageQueue组件的实例来执行,执行事务的Begin方法,并将其实例传递到收发方法。然后,调用Commit以将事务的更改保存到目的队列。 创建事务性消息和普通的消息有一点小小的区别,大家可从下图上体会到: 通过代码方式建立事务性消息队列只在Create方法的参数上动动手脚就OK,详细如下:
启动了事务,那么在发送和接收消息的时候肯定是与原来有一定的差别的,这里我就不做详细介绍,下 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |