2012-06-22 69 views

回答

4

我很難找到這個答案,所以決定發佈我發現的東西。就創建腳本vs fsi而言,這可能有一些變化,但這是我的解決方案。

在它創建的腳本:

open System 
open System.Messaging 

let purgeQueue (server :string) = 
    let qs = MessageQueue.GetPrivateQueuesByMachine server 
    for q in qs do 
     printfn "%O" q.QueueName 
     q.Purge() 

啓動FSI和r組成System.Messaging.dll。然後加載此腳本並在所需的服務器上運行call purgeQueue。我的情況是我在箱子上時通過了本地主機。

4

@Joshua - 我爲你的代碼增加了一些額外的位,僅僅是爲了它。這會自動引用System.Messaging.dll,並允許您切換是否清除公共和專用隊列或公用隊列。

#if INTERACTIVE 
#r "System.Messaging.dll" 
#endif 

open System 
open System.Diagnostics 
open System.Messaging 

// 
[<RequireQualifiedAccess>] 
module Queue = 
    // 
    let purgeByMachine includePrivateQueues (machineName : string) = 
     let queues = 
      let publicQueues = MessageQueue.GetPublicQueuesByMachine machineName 
      if includePrivateQueues then 
       let privateQueues = MessageQueue.GetPrivateQueuesByMachine machineName 
       Array.append publicQueues privateQueues 
      else 
       publicQueues 

     queues 
     |> Array.iter (fun queue -> 
      sprintf "Purging queue: %s" queue.QueueName 
      |> Trace.WriteLine 

      queue.Purge()) 
+0

謝謝傑克! –

相關問題