2009-07-15 56 views

回答

1

嘗試使用格式名稱,像這樣:

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

我認爲系統隊列不能由路徑訪問。你必須使用格式名稱。

look at Yoel Arnon's comment at the bottom of the page.

+0

這是不正確的代碼甚至不會編譯,(因爲反斜槓),請參閱我的回答正確的語法(你的鏈接沒給我正確的答案,不過) 。 – 2012-05-11 22:23:38

5

系統隊列正確的格式:

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

我測試過這種格式在Windows 7和Windows操作系統後,2003

(點:指本地主機/本地計算機)

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); 
      } 
     } 
    } 
} 
相關問題