Я создал скрипт для мониторинга набора очередей, и, хотя он отлично работает с удаленными частными очередями, он не работает с исходящими очередями. Я провел эксперимент, удалив из скрипта все, кроме существенного, и создал следующий тестовый скрипт:
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();
Затем я запустил его на сервере и, даже если очередь содержит более тысячи сообщений, PeekCurrent всегда возвращает ноль. Если я удаляю MQ_ADMIN_ACCESS, он пытается подключиться к удаленной частной очереди, и время ожидания истекает (как и ожидалось, так как он не работает, чтобы сообщения накапливались). Если я затем запусту Удаленную частную очередь, она правильно прочитает из нее сообщение.
Из любопытства я обнаружил, что info.Open всегда успешно выполняется независимо от имени очереди (то есть, существует ли оно или нет), когда используется MQ_ADMIN_ACCESS. Например, я набрал «DIRECT = OS: Wh независимо \ private $ \ RandomQueueName», и я не получил никакой ошибки.
Я не эксперт MSMQ (как раз наоборот), поэтому я, вероятно, совершаю очевидную ошибку и не вижу ее. Любая помощь приветствуется. Спасибо.
Дополнительный вопрос : возможно ли просмотреть удаленную исходящую очередь? На данный момент скрипт выполняется на машине, где находится исходящая очередь, которую я тестирую, но не только с этими очередями. Я хотел бы избежать развертывания сценария везде, я бы хотел, чтобы он был в одном месте. Спасибо.