6 votes

Comment purger une file d'attente MSMQ sortante ?

Existe-t-il un moyen de purger une file d'attente sortante ? Il ne semble pas que je puisse le faire avec le snap-in MMC et quand j'essaie de la purger en code, j'obtiens une erreur Format name is invalid l'ordinateur auquel il envoie les messages n'existe pas, donc ils ne seront jamais envoyés, mais les files d'attente ont rempli l'espace de stockage maximal de MSMQ, donc chaque fois que mon application essaie d'envoyer un autre message, j'obtiens le message suivant insufficient resources exception.

J'ai essayé les formats suivants, mais ils échouent tous, à l'exception des suivants format name is invalid

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

6voto

kprobst Points 8360

Vous devriez pouvoir le purger manuellement à partir du snap-in MMC. MSMQ devient très avare lorsqu'il atteint ses limites de stockage, de sorte que de nombreuses opérations échoueront avec "permission denied" et d'autres choses de ce genre.

La solution à long terme consiste évidemment à modifier la configuration afin de disposer d'un espace de stockage suffisant pour vos habitudes d'utilisation particulières.

Edit : Il se peut que vous rencontriez une limitation dans l'API gérée liée aux capacités d'administration et aux files d'attente à distance. Jetez un coup d'œil à este article d'Ingo Rammer. Il inclut même un exemple de p-invoke.

3voto

Daniel Bahmani Points 443

Il est possible d'utiliser du code géré pour purger une file d'attente sortante :

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

dans lequel se trouve GetPrivateMqPath :

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

QueueAccessMode.ReceiveAndAdmin pointe vers la file d'attente sortante.

1voto

Filburt Points 7490

Vous pouvez essayer FORMATNAME:DIRECT=OS:computer\PRIVATE$\queuename .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X