Есть ли способ очистить исходящую очередь. Не похоже, что я могу сделать это с помощью оснастки MMC, и когда я пытаюсь очистить его в коде, я получаю сообщение об ошибке Format name is invalid
компьютер, на который отправляются сообщения, не существует, поэтому они никогда не будут отправлены, однако очереди заполнили максимальное пространство для хранения MSMQ, поэтому каждый раз, когда мое приложение пытается отправить другое сообщение, я получаю исключение insufficient resources
.
Я пробовал следующие форматы, и все они терпят неудачу, за исключением format name is invalid
DIRECT = OS: COMPUTER \ private $ \ queuename
OS: COMPUTER \ private $ \ queuename
КОМПЬЮТЕР \ частное $ \ queuename
Как очистить исходящую очередь MSMQ
Ответы (3)
Вы должны иметь возможность очистить его вручную из оснастки MMC. MSMQ становится очень скупым, когда достигает своих пределов хранилища, поэтому многие операции завершаются ошибкой с «отказом в разрешении» и тому подобным.
Очевидно, что долгосрочным решением является изменение конфигурации, чтобы было достаточно места для хранения для ваших конкретных шаблонов использования.
Изменить. Возможно, вы столкнулись с ограничением в управляемом API, связанным с возможностями администратора и удаленными очередями. Прочтите эту статью автора Инго Раммер. Он даже включает пример p-invoke.
можно использовать управляемый код для очистки исходящей очереди:
using (var msgQueue = new MessageQueue(GetPrivateMqPath(queueName, remoteIP), QueueAccessMode.ReceiveAndAdmin))
{
msgQueue.Purge();
}
в котором GetPrivateMqPath:
if (!string.IsNullOrEmpty(remoteIP))
return String.Format("FORMATNAME:DIRECT=TCP:{0}\\private$\\{1}", remoteIP, queueName);
else
return @".\private$\" + queueName;
QueueAccessMode.ReceiveAndAdmin указывает на исходящую очередь.
Вы можете попробовать FORMATNAME:DIRECT=OS:computer\PRIVATE$\queuename
.