MSMQ-la file d'attente des messages n'a pas été installée sur cet ordinateur
j'ai écrit un exemple d'application pour écrire à une file d'attente publique et privée qui sont sur dev server. Je n'ai pas installé la file d'attente des messages sur ma machine locale.
je reçois une erreur: la mise en file d'attente des messages n'a pas été installée sur cet ordinateur.
Erreur sur cette ligne:
MessageQueue.Exists(queueName)
voici le code de test complet, toutes les files d'attente privées et publiques commentées et non commentées entraînent la même erreur. Ce que je fais mal ici?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Messaging;
namespace MsmqTest
{
public partial class Form1 : Form
{
//@"DIRECT=OS:devbox01PRIVATE$PrivateQueueDev";
//@"DIRECT=TCP:192.168.6.102PRIVATE$PrivateQueueDev";
private const string QueueName = @"DIRECT=TCP:192.168.6.102PRIVATE$PrivateQueueDev";
//@"DIRECT=OS:devbox01PublicQueueDev";
//@"DIRECT=TCP:192.168.6.102PublicQueueDev";
private const string QueueNamePublic = @"DIRECT=TCP:192.168.6.102PublicQueueDev";
public Form1()
{
InitializeComponent();
}
private void Write_Click(object sender, EventArgs e)
{
MessageQueue msgQ;
string msgText = String.Format("Message: {0}", DateTime.Now);
try
{
msgQ = GetQ(QueueNamePublic);
msgQ.Send(msgText);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
private void Read_Click(object sender, EventArgs e)
{
}
private MessageQueue GetQ(string queueName)
{
MessageQueue msgQ;
if(!MessageQueue.Exists(queueName))
{
try
{
msgQ = MessageQueue.Create(queueName);
}
catch (Exception ex)
{
throw new Exception("Error creating queue", ex);
}
}
else
{
try
{
msgQ = new MessageQueue(queueName);
}
catch (Exception ex)
{
throw new Exception("Error getting queue", ex);
}
}
return msgQ;
}
}
}
2 réponses
Vous devez install MSMQ sur toutes les machines qui veulent participer à la transmission et à la réception des messages. Cela inclut l'envoi de machines telles que votre machine locale dans ce cas.
la raison en est que MSMQ utilise un modèle de messagerie en différé.
http://en.wikipedia.org/wiki/Store_and_forward
que se passe-t-il réellement lorsque vous "envoyez" un message à votre serveur? est:
- le gestionnaire de file d'attente Local écrit le message dans une file d'attente temporaire locale.
- le gestionnaire de file d'attente local se connecte au gestionnaire de file d'attente à distance.
- Le message est transmis.
- le gestionnaire de file d'attente à distance écrit le message dans la file d'attente à distance.
Refactoriser le MSMQ logique à un service et à appeler le service à partir de votre code, en passant le message. De cette façon, vous n'avez qu'à installer MSMQ sur le serveur.