C#如何查看MSMQ里的消息,并能进行删除操作,有人知道吗?

realtb 2007-03-20 10:09:56
在队列里存放有N条消息,需要能在页面里把这些消息显示出来,并能对这些消息进行删除操作
...全文
671 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
liang4571231 2011-07-11
  • 打赏
  • 举报
回复
泛型约束
[Quote=引用 6 楼 realtb 的回复:]

还是有点不懂
既然 T 是执行操作的类型
那 public class MessageQueueHelper <T> : MarshalByRefObject where T : class, new()
这里 怎么会两次继承,能解释下吗
[/Quote]
realtb 2007-03-21
  • 打赏
  • 举报
回复
问题已解决
谢谢各位
realtb 2007-03-20
  • 打赏
  • 举报
回复
自己顶
realtb 2007-03-20
  • 打赏
  • 举报
回复
还是有点不懂
既然 T 是执行操作的类型
那 public class MessageQueueHelper<T> : MarshalByRefObject where T : class, new()
这里 怎么会两次继承,能解释下吗
hertcloud 2007-03-20
  • 打赏
  • 举报
回复
T是你要执行操作的 类型
比如你 int string object 或你自己定义的类....

realtb 2007-03-20
  • 打赏
  • 举报
回复
现在我需要做的是,如果有坏死的消息存在于队列中,需要手动删除掉

to flyaqiao(KiteReport(http://www.kitesoft.cn))
MessageQueueHelper<T> 这个 <T> 请教一下,是否是参数,还是什么?
coolaolmar 2007-03-20
  • 打赏
  • 举报
回复
读的话msdn上有例子 删除的话就不用了 读一条他就会自己少一条
flyaqiao 2007-03-20
  • 打赏
  • 举报
回复
/******************************************************************
* Copyright(c) Suzsoft DotNet Group
* Description : MessageQueue helper class
* CreateDate : 2006-05-11 02:28:58
* Creater : QCao
* LastChangeDate:
* LastChanger :
* Version Info :
* ******************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Messaging;

namespace Suzsoft.Alarming.Service
{
/// <summary>
/// Message Queue helper class
/// </summary>
/// <typeparam name="T"></typeparam>
public class MessageQueueHelper<T> : MarshalByRefObject where T : class, new()
{
public MessageQueueHelper(string path)
{
m_AllowException = true;
if (MessageQueue.Exists(path))
m_Msq = new MessageQueue(path);
else
{
m_Msq = MessageQueue.Create(path);
m_Msq.MaximumQueueSize = CommonSettings.QueueMaxSize;
}
m_Msq.SetPermissions("Everyone", System.Messaging.MessageQueueAccessRights.FullControl);

m_Msq.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
m_Msq.Label = typeof(T).Name;
m_Msq.ReceiveCompleted += new ReceiveCompletedEventHandler(Msq_ReceiveCompleted);
}
~MessageQueueHelper()
{
Close();
}
private MessageQueue m_Msq;
private bool m_AllowException;

public bool AllowException
{
get { return m_AllowException; }
set { m_AllowException = value; }
}
private bool MssageQueueReady()
{
if (m_Msq == null)
if (AllowException)
throw new Exception("The message queue is not ready.");
else
return false;
else
return true;
}
public void Send(object msg)
{
if (!msg.GetType().Equals(typeof(T))) return;
if (!MssageQueueReady()) return;
try
{
m_Msq.Send(msg);
}
catch
{
// TODO: Send Message queue failed
}
}
public void Send(object msg, string label)
{
if (!MssageQueueReady()) return;
try
{
m_Msq.Send(msg, label);
}
catch
{
// TODO: Send Message queue failed
}
}
public T Receive()
{
if (!MssageQueueReady()) return default(T);
Message m = m_Msq.Receive(MessageQueueTransactionType.Single);
return m.Body as T;
}
public IList<T> ReceiveAll()
{
if (!MssageQueueReady()) return null;
Message[] ms = m_Msq.GetAllMessages();
IList<T> list = new List<T>();
foreach (Message m in ms)
{
list.Add(m.Body as T);
}
return list;
}
public T Peek()
{
if (!MssageQueueReady()) return default(T);
//m_Msq.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
Message m = m_Msq.Peek();
return m.Body as T;
}
public void AsynchronismReceive()
{
if (!MssageQueueReady()) return;
m_Msq.BeginReceive();
}
public void EndReceive()
{
if (!MssageQueueReady()) return;
}
private void Msq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
MessageQueue mq = (MessageQueue)sender;
Message m = mq.EndReceive(e.AsyncResult);
if (ReceiveEvent != null)
ReceiveEvent(this, new ReceiveEventArgs<T>(m.Body as T));
mq.BeginReceive();
}
public event ReceiveEventHandler ReceiveEvent;
public delegate void ReceiveEventHandler(object sender, ReceiveEventArgs<T> e);
public void Close()
{
if (m_Msq != null)
m_Msq.Close();
}
}

public class ReceiveEventArgs<T> : EventArgs where T : class
{
public ReceiveEventArgs(T result)
{
m_Result = result;
}
private T m_Result;

public T Result
{
get { return m_Result; }
//set { m_Result = value; }
}
}
}
andyhooo 2007-03-20
  • 打赏
  • 举报
回复
帮顶
foyuan 2007-03-20
  • 打赏
  • 举报
回复
.net 里面封装了
MSDN Webcast里面有讲解的
realtb 2007-03-20
  • 打赏
  • 举报
回复
to JavaK()
我用的是2003,现在是可以查看了,不过就是不能单个删除
因为我需要实现的是,把在队列里所有还未接收的消息显示出来,并查看其内容来确定是否删除该条消息.
看了System.Messaging ,好象并没有提到有 可以单个删除的方法
只有Delete 删除队列,或 Purge 清除队列里全部消息的方法
不知道,是否可以实现,单个删除
JavaK 2007-03-20
  • 打赏
  • 举报
回复
如果你用的是VS2003就不用着急看泛型了,Messing.MessageQueue,你仔细看看这个就可以了。
jetxia 2007-03-20
  • 打赏
  • 举报
回复
楼主 看看泛型吧
realtb 2007-03-20
  • 打赏
  • 举报
回复
帮帮我吧

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧