具體的理論這裡就不說了。主要說一下做的例子。本例子主要是發送不同的訊息。然後根所ID得到指定的訊息內容。
方法:
1、在專用隊列增加一個專用隊列"Demo"。所有選項為預設即可。
2、發送訊息。輸入訊息的ID,輸入訊息的內容發送訊息。
3、輸入被接收訊息的ID,根據此ID找到訊息後查看其內容。
訊息ID設定方法:
訊息中沒有ID這個選項。所以不知如何把訊息發送給指定的人。後來找到了Label屬性, 我將要發送的給某某人的ID設在此屬性中來解決問題。 如果誰有更好的方法也請回貼告知我。
代碼:
第二步中發送按鈕代碼為:
/// <summary>
/// 定義訊息路徑
/// </summary>
public const string sMessageConnectionString = @".\Private$\Demo";
/// <summary>
/// 發送
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSend_Click(object sender, EventArgs e)
{
if (txbSend.Text.Trim() == "")
{
MessageBox.Show("請輸入要發送的message!");
txbSend.Focus();
return;
}
//完整隊列格式為: 電腦名稱\private$\隊列名稱 (專用隊列)
MessageQueue mqQue = new MessageQueue(txtQueue.Text.Trim());
mqQue.MessageReadPropertyFilter.SetAll();
System.Messaging.Message msg = new System.Messaging.Message();
//訊息主體
msg.Body = txbSend.Text.Trim() + " " + DateTime.Now.ToString();
//用描述設定ID
msg.Label = txbMessageID.Text;
//將訊息加入到發送隊列
msg.ResponseQueue = mqQue;
msg.AttachSenderId = true;
msg.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
try
{
//發送
mqQue.Send(msg);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
第三步中接收訊息的代碼:
/// <summary>
/// 接收
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnReceive_Click(object sender, EventArgs e)
{
MessageQueue mqQue = null;
if (MessageQueue.Exists(sMessageConnectionString))
{
mqQue = new System.Messaging.MessageQueue(sMessageConnectionString);
}
//得到所有訊息
System.Messaging.Message[] messages = mqQue.GetAllMessages();
if (messages.Length > 0)
{
foreach (System.Messaging.Message msgVal in messages)
{
//根據ID得到訊息(這個ID放在訊息的label中)
if (msgVal.Label==txbReceiveMsgID.Text)
{
//同步接收,直到得到一條訊息為止,如果訊息佇列為空白,會一直阻塞
System.Messaging.Message msg = mqQue.Receive();
msg.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
//訊息的內容
txbReceive.Text = "[" + DateTime.Now.ToString() + "]: " + msg.Body.ToString();
break;
}
else
{
txbReceiveMsgID.Text = "沒有找到指定ID的Message";
}
}
}
}
清除所有訊息代碼:
/// <summary>
/// 清除訊息佇列
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnClear_Click(object sender, EventArgs e)
{
MessageQueue mqQue = null;
if (MessageQueue.Exists(sMessageConnectionString))
{
//清除所有訊息
mqQue = new System.Messaging.MessageQueue(sMessageConnectionString);
mqQue.Purge();
}
}
代碼下載:
http://files.cnblogs.com/scottckt/MessageStudy.rar