.net - 如何在工作组安装上以编程方式清除 MSMQ 系统队列日志?

标签 .net msmq

我试试这个: MessageQueue mq = new MessageQueue(".\Journal$"); mq.Purge();

它在 XP 上运行良好。 但是,在Windows 2003服务器上,我总是遇到这个错误: “工作组安装计算机不支持该操作。”

最佳答案

系统队列的正确格式:

FormatName:Direct=os:.\\System$;JOURNAL

我已在 Windows 7 和 Windows 2003 上测试了此格式。

(os:后面的点表示本地主机/本地计算机)

var systemJournalQueue = new MessageQueue("FormatName:Direct=os:.\\System$;JOURNAL");
var systemDeadLetterQueue = new MessageQueue("FormatName:Direct=os:.\\System$;DEADLETTER");
var systemDeadXLetterQueue =new MessageQueue("FormatName:Direct=os:.\\System$;DEADXACT"));

systemJournalQueue.Purge();

或者如果您想保留 N 天的消息,您可以这样做:

private static void PurgeQueues(int archiveAfterHowManyDays, MessageQueue queue)
{
    queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(System.String) });
    queue.MessageReadPropertyFilter.ArrivedTime = true;

    using (MessageEnumerator messageReader = queue.GetMessageEnumerator2())
    {
        while (messageReader.MoveNext())
        {
            Message m = messageReader.Current;
            if (m.ArrivedTime.AddDays(archiveAfterHowManyDays) < DateTime.Now)
            {
                queue.ReceiveById(m.Id);
            }
        }
    }
}

关于.net - 如何在工作组安装上以编程方式清除 MSMQ 系统队列日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1131384/

相关文章:

msmq - 远程队列地址的格式是什么

c# - 使用 C#/.NET 的电子邮件发送策略

msmq - MSMQ 事务性消息传递如何工作?

msmq - 无法读取远程专用队列

.net - 通过 NHibernate 使用无状态 session 渴望获取曾孙集合

c# - Web 应用程序中的异步函数 Thread.Sleep

c# - 如何从 Azure 角色内部检测当前订阅 ID?

c# - 从 MSMQ 读取时无法反序列化 Message.Body

.net - Rx 与响应式编程有什么关系?

c# - 我应该使用接口(interface)来强制泛型吗?