//-----------------------------------------------------------------------
//
// Suzhou Linktron Systems Co.,Ltd . All rights reserved.
//
// 温向超
// 消息队列操作辅助类
//-----------------------------------------------------------------------
using System;
using System.Messaging;
namespace HMI.Core.Util
{
///
/// 消息队列操作类
///
public class MSMQHelper
{
///
/// 消息队列名称
///
private string msmqName = string.Empty;
///
/// 消息队列路径
///
private string msmqPath = string.Empty;
///
/// 要操作的消息队列
///
private MessageQueue msgQueue = null;
///
/// 构造函数
///
/// 消息队列名称
public MSMQHelper(string Name)
{
try
{
this.msmqName = Name;
this.msmqPath = ".\\private$\\" + this.msmqName;
if (MessageQueue.Exists(this.msmqPath))
{
// 如果当前消息队列已经存在
this.msgQueue = new MessageQueue(this.msmqPath);
}
else
{
// 如果消息队列不存在,则创建消息对垒
this.msgQueue = MessageQueue.Create(this.msmqPath);
}
this.msgQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 发送消息
///
/// 消息ID
/// 要发送的字符串
public void Send(string MessageID,string MsgString)
{
try
{
this.msgQueue.Send(MsgString, MessageID);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 接收消息队列中的消息
///
/// 超时时间(ms)
/// 消息ID
/// 消息内容
public void Receive(long TimeOut,out string MessageID,out string MsgString)
{
try
{
MessageID = string.Empty;
MsgString = string.Empty;
TimeSpan Time = new TimeSpan(TimeOut);
Message MsgReceived = null;
try
{
MsgReceived = this.msgQueue.Receive(Time);
}
catch
{
// do nothing
}
if(MsgReceived!=null)
{
MessageID = MsgReceived.Label;
MsgString = MsgReceived.Body.ToString();
}
}
catch(Exception ex)
{
throw new Exception("接收消息失败:" + ex.Message);
}
}
///
/// 清除消息队列中的消息
///
public void Clear()
{
try
{
this.msgQueue.Purge();
}
catch(Exception ex)
{
throw new Exception("清除消息队列失败:" + ex.Message);
}
}
///
/// 关闭当前队列
///
public void Close()
{
this.msgQueue.Close();
}
///
/// 删除当前队列
///
public void Delete()
{
MessageQueue.Delete(this.msmqPath);
}
}
}