我創建了一個腳本來監視一組隊列,並且儘管它與遠程專用隊列完美協作,但它不適用於傳出隊列。我從腳本中刪除一切,但基本做了一個實驗,我創建了下面的測試腳本:使用JScript查看MSMQ傳出隊列
var info = new ActiveXObject("MSMQ.MSMQQueueInfo");
info.FormatName = /*<Queue name>*/;
// 0x80 = MQ_ADMIN_ACCESS
// 0x20 = MQ_PEEK_ACCESS
// 0x00 = MQ_DENY NONE
var mq = info.Open(0x80 | 0x20, 0x00);
var msg = mq.PeekCurrent(false, true, 0);
if (msg != null) {
WScript.echo("message found");
}
else
{
WScript.echo("Nothing");
}
mq.close();
然後我跑在服務器上,而且即使隊列包含超過1000封,PeekCurrent總是返回null。如果我刪除MQ_ADMIN_ACCESS,它會嘗試連接到遠程專用隊列,並且超時(如預期的那樣,因爲它會讓消息累積)。如果我然後啓動遠程專用隊列,它會從中正確讀取消息。
出於好奇,我發現info.Open無論使用MQ_ADMIN_ACCESS時的隊列名稱(即是否存在)都會成功。例如,我輸入「DIRECT = OS:無論\私人$ \ RandomQueueName」,我沒有得到任何錯誤。
我不是MSMQ的專家(完全相反),所以我可能犯了一個明顯的錯誤,我看不到它。任何幫助都比歡迎。謝謝。
旁邊的問題:是否有可能偷看遠程傳出隊列?目前腳本運行在正在測試的傳出隊列所在的機器上,但它不是唯一具有這些隊列的人。我想避免在任何地方部署腳本,我寧願將它放在一個地方。謝謝。