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;
        }

    }
}
13
demandé sur learning... 2012-03-21 07:05:20

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:

  1. le gestionnaire de file d'attente Local écrit le message dans une file d'attente temporaire locale.
  2. le gestionnaire de file d'attente local se connecte au gestionnaire de file d'attente à distance.
  3. Le message est transmis.
  4. le gestionnaire de file d'attente à distance écrit le message dans la file d'attente à distance.
16
répondu tom redfern 2018-05-21 04:52:50

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.

5
répondu Keith T. Anderson 2014-02-05 23:42:37