一、本章主要介绍构建MSMQ的框架类,主要放在你的框架类里面,类名字命名为Messages,我的框架项目类名称是MingXu.FrameWork,我将Messages放到它下面,MingXu.FrameWork类型为Class Library
二、添加对System.Messaging的引用:
三、代码如下:代码都有注释,所以不做过多的解释了,如果有看不明白的,请在评论里面留言,我在加注释
//******************************************************
//文件名:Messages.cs
//功能:MessageQueue框架类
//作者:徐明
//日期:2009-10-20
//*******************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Messaging;
using System.Net;
namespace MingXu.FrameWork
{
public sealed class Messages
{
private static string _machineName = Dns.GetHostName();//获取机器名
private static string QueuePath = ".//private$//"; //私有队列根路径
/// <summary>
/// 插入新的队列
/// </summary>
public static void CreateQueue(string Key)
{
if (!IsExit(Key))
{
MessageQueue mq = MessageQueue.Create(QueuePath + Key, true);
mq.Label = QueuePath + Key;
mq.SetPermissions("administrator", MessageQueueAccessRights.FullControl);
}
}
/// <summary>
/// 发送消息到WINDOWS队列
/// </summary>
/// <param name="QueueKey">sub path</param>
/// <param name="Label">message name</param>
/// <param name="Body">message content</param>
/// <returns>bool</returns>
public static bool Send(string QueueKey, string Label, string Body)
{
try
{
MessageQueue mq = new System.Messaging.MessageQueue(QueuePath + QueueKey);
System.Messaging.Message msg = new System.Messaging.Message();
msg.Formatter = new System.Messaging.ActiveXMessageFormatter();
msg.Label = Label;
msg.Body = Body;
mq.Send(msg);
return true;
}
catch (Exception ex)
{
Log.Debug(ex.Message);
return false;
}
}
/// <summary>
/// 功能:获取当前机器下的所有私有的Queue名字的列表
/// 日期:2009-10-20
/// 作者:徐明
/// </summary>
/// <returns>List<string>:Queue名称List</returns>
public static List<string> GetQueueList()
{
if (string.IsNullOrEmpty(_machineName))
return null;
MessageQueue[] queueArray = MessageQueue.GetPrivateQueuesByMachine(_machineName);
if (queueArray.Length == 0)
return null;
//转换MessageQueue[]类型到List<string>
return queueArray.ToList<MessageQueue>().ConvertAll<string>(
p =>
{
return p.QueueName.Split('//')[1];
}
);
}
/// <summary>
/// 功能:根据Queue名称获取Message的列表
/// 日期:2009-10-20
/// 作者:徐明
/// </summary>
/// <param name="queueName">Queue名称</param>
/// <returns>List<string>:Message名称List</returns>
public static List<string> GetMessageList(string queueName)
{
if (string.IsNullOrEmpty(queueName))
return null;
MessageQueue mq = new MessageQueue(QueuePath + queueName);
if (mq == null)
return null;
Message[] messageArray = mq.GetAllMessages();
if (messageArray.Length == 0)
return null;
//转换Message[]类型到List<string>
return messageArray.ToList<Message>().ConvertAll<string>(
p =>
{
return p.Label;
}
);
}
}
}