Brian
Brian

Reputation: 163

How to Purge an MSMQ Outgoing Queue

Is there any way to purge an outgoing queue. It doesn't appear that I can do it with the MMC snap-in and when i try to purge it in code i get an error Format name is invalid the computer it's sending the messages to does not exist, so they will never be sent, however the queues filled up the max storage space for MSMQ so everytime my application tries to send another message i get the insufficient resources exception.

I've tried the following formats and they all fail with the exception format name is invalid

DIRECT=OS:COMPUTER\private$\queuename
OS:COMPUTER\private$\queuename
COMPUTER\private$\queuename

Upvotes: 6

Views: 9983

Answers (3)

Daniel B
Daniel B

Reputation: 3185

it is possible use managed code to purge an outgoing queue:

using (var msgQueue = new MessageQueue(GetPrivateMqPath(queueName, remoteIP), QueueAccessMode.ReceiveAndAdmin))
{
    msgQueue.Purge();
}

in which GetPrivateMqPath is:

if (!string.IsNullOrEmpty(remoteIP))
    return String.Format("FORMATNAME:DIRECT=TCP:{0}\\private$\\{1}", remoteIP, queueName);
else
    return @".\private$\" + queueName;

QueueAccessMode.ReceiveAndAdmin points to outgoing queue.

Upvotes: 3

kprobst
kprobst

Reputation: 16651

You should be able to purge it manually from the MMC snap-in. MSMQ gets very stingy when it reaches its storage limits, so a lot of operations will fail with "permission denied" and things like that.

The long-term solution obviously is to modify the configuration so there is enough storage space for your particular usage patterns.

Edit: You might be running into a limitation in the managed API related to admin capabilities and remote queues. Take a look at this article by Ingo Rammer. It even includes a p-invoke example.

Upvotes: 6

Filburt
Filburt

Reputation: 18061

You could try FORMATNAME:DIRECT=OS:computer\PRIVATE$\queuename.

Upvotes: 1

Related Questions