2010-10-31 9 views
2

J'ai une application Web et un service sur la même machine et communique via des files d'attente de messages. Le problème que je rencontre est que la moitié du temps, les messages que je envoie du service n'arrivent pas au code de lecture dans l'application web. Certains arriveront et d'autres non. Les messages sont envoyés avec au moins 1 seconde de retard entre eux. Pour rendre les choses plus difficiles - Je ne vois aucun de mes messages dans la console de gestion, même ceux qui arrivent. J'ai tourné la journalisation, mais ne vois pas de différence. J'ai un accès complet à la file d'attente.MSMQ Messages ne s'affichent pas

Je suis nouveau à MSMQ et suppose que c'est quelque chose de petit me manque, mais de la lecture en ligne je ne pouvais pas comprendre.

Le code de lecture ressemble à ceci:

public SomeMethod 
{ 
... 
    MessageQueue respQ = Utils.GetResponseQueue(); 
    respQ.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) }); 
    respQ.ReceiveCompleted += new ReceiveCompletedEventHandler(OnReceiveCompleted); 
    respQ.BeginReceive(); 
} 
public void OnReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult) 
{ 
    MessageQueue replyQueue = (MessageQueue)source; 
    Message replyMessage = replyQueue.EndReceive(asyncResult.AsyncResult); 

    try 
    { 
      //process the message 
      //... 

    } 
    catch (Exception) 
    { 
    } 

    replyQueue.BeginReceive(); 
} 

apprécierait l'aide sur les messages manquants et les messages ne figurant pas dans la console de gestion

Moshe

+0

Commencez par supprimer cette instruction try/catch. –

+0

Eh bien, je l'ai fait - je suis passé à une réception périodique sur la file d'attente. Maintenant, je ne reçois aucun message. –

Répondre

2

Eh bien, il semble que j'ai résolu cela.

  1. Le problème avec les messages qui ne sont pas visibles dans la console de gestion me semble vraiment étrange. Je créais la file d'attente de mon code si elle n'existait pas (comme dans tous les échantillons là-bas). Il s'est avéré que si je place l'étiquette de file d'attente à quelque chose - je peux voir ses messages dans les consoles de gestion. Sinon, je ne peux pas. Je n'ai pas cherché l'explication, à la surface, les choses ne sont pas liées de la même façon et cela me semble être un bug. Les messages manquants - le plus proabably le problème n'était pas dans la file d'attente, mais dans la façon dont j'ai traité les messages lues. Je les récupérais à partir d'une publication différée AJAX et l'ajout d'une variable d'état de session. Le problème que j'ai découvert était que ce rappel de minuterie venait parfois dans la session d'origine, et parfois - pas. Donc, je ne voyais pas certains de mes messages imprimés.

Questions connexes