原文地址:
保存消息队列数据的本地磁盘地址:C:\WINDOWS\system32\msmq\storage
注意:
1,要使用 windows 消息队列机制,必须在该 windows操作系统中先安装“ windows 消息队列” 组件(从操作系统光盘中) ;
2,要使用启用消息队列,必须先启动“Messenger”服务(传输客户端和服务器之间的 NET SEND 和 Alerter 服务消息。此服务与 Windows Messenger 无关。如果服务停止,Alerter 消息不会被传输。如果服务被禁用,任何直接依赖于此服务的服务将无法启动。);
控件:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
private System.Windows.Forms.Button btnSendMessage; private System.Windows.Forms.Button btnEnumerateMessages; private System.Windows.Forms.TextBox txtMessages; private System.Windows.Forms.Button btnRemoveMessages; private System.Windows.Forms.Button btnSendHighestPriorityMessage;
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Messaging; using System.Xml.Serialization; namespace MessageQueuingExample { public partial class Form1 : Form { // The . in the queueName represents localhost private const string queueName = " .\\Private$\\Liuq " ; // private const string queueName = "A405\\Private$\\Liuq"; // We need this class-wide to access it in the methods. MessageQueue queue = null ; public Form1() { InitializeComponent(); } private void Form1_Load( object sender, EventArgs e) { // Create the queue if it doesn't exist. CreateQueue(); } private void CreateQueue() { // Does the queue already exist?? if (MessageQueue.Exists(queueName)) // Yes, it's already there. queue = new MessageQueue(queueName); else // No, we need to create it. queue = MessageQueue.Create(queueName, false ); } private void btnSendMessage_Click( object sender, EventArgs e) { // Instantiate our MessageContent object. MessageContent message = new MessageContent( " Hello world! " ); // Send it to the queue. queue.Send(message, " Sample Message " ); MessageBox.Show( " Message sent. " , " MSMQ " ); } private void btnEnumerateMessages_Click( object sender, EventArgs e) { // Clear the textbox. this .txtMessages.Clear(); // Get all messages on the queue. System.Messaging.Message[] messages = queue.GetAllMessages(); // Loop through the messages. foreach (System.Messaging.Message message in messages) { // Set the formatter for the message. message.Formatter = new System.Messaging.XmlMessageFormatter( new Type[ 1 ] { typeof (MessageContent) }); // Get the MessageContent object out of the message. MessageContent content = (MessageContent)message.Body; // Update the textbox. this .txtMessages.Text += content.MessageText + " - " + content.CreationDate.ToString() + " \r\n " ; } } private void btnRemoveMessages_Click( object sender, EventArgs e) { // Purge all messages from the queue. queue.Purge(); MessageBox.Show( " Messages purged " , " MSMQ " ); } private void btnSendHighestPriorityMessage_Click( object sender, EventArgs e) { // Create a XmlSerializer for the object type we're sending. XmlSerializer serializer = new XmlSerializer( typeof (MessageContent)); // Instantiate a new message. System.Messaging.Message queueMessage = new System.Messaging.Message(); // Set the priority to Highest. queueMessage.Priority = MessagePriority.Highest; // Create our MessageContent object. MessageContent messageContent = new MessageContent( " Hello world - IMPORTANT! " ); // Serialize the MessageContent object into the queueMessage. serializer.Serialize(queueMessage.BodyStream, messageContent); // Send the message. queue.Send(queueMessage, " HIGH PRIORITY " ); MessageBox.Show( " Important message sent. " , " MSMQ " ); } } }