Как программно очистить журнал очереди MSMQ при установке в рабочей группе? - PullRequest
3 голосов
/ 15 июля 2009

Я пытаюсь это: MessageQueue mq = new MessageQueue (". \ Journal $"); mq.Purge (); * * тысяча один

Хорошо работает на XP. Но на сервере Windows 2003 у меня всегда есть эта ошибка: «Установочный компьютер рабочей группы не поддерживает операцию.»

Ответы [ 2 ]

5 голосов
/ 12 мая 2012

Правильный формат для системных очередей:

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);
            }
        }
    }
}
1 голос
/ 18 июля 2009

Попробуйте использовать имя формата так:

MessageQueue mq = new MessageQueue("DIRECT=OS:computername\SYSTEM$;JOURNAL");
mq.Purge();

Я думаю, что к системной очереди нельзя получить доступ по пути. Вы должны использовать имя формата.

посмотрите на комментарий Йоэля Арнона внизу страницы.

...