Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MSMQ - message queuing has not been installed on this computer

Tags:

msmq

I have written a sample application to write to a public and private queues that are on dev server. I don't have the message queue installed on my local machine.

I am getting error: message queuing has not been installed on this computer.

Error is on this line:

MessageQueue.Exists(queueName)

Here is the full test code, all commented and not commented private and public queues are resulting in the same error. What am i doing wrong here?

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:devbox01\PRIVATE$\PrivateQueueDev";
        //@"DIRECT=TCP:192.168.6.102\PRIVATE$\PrivateQueueDev";
        private const string QueueName = @"DIRECT=TCP:192.168.6.102\PRIVATE$\PrivateQueueDev";


        //@"DIRECT=OS:devbox01\PublicQueueDev";
        //@"DIRECT=TCP:192.168.6.102\PublicQueueDev";
        private const string QueueNamePublic = @"DIRECT=TCP:192.168.6.102\PublicQueueDev";

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

    }
}
like image 344
learning... Avatar asked Mar 21 '12 03:03

learning...


People also ask

How do I install MSMQ on Windows 10?

Step 1: Open Windows Control Panel. Select program, and then select programs and features. Step 2: Choose “Turn Windows features on or off.” Then, select “Microsoft Message Queue (MSMQ) Server.” Step 3: Click on the taskbar search option and search for “Computer Management.”


1 Answers

You need to install MSMQ on ALL machines which want to participate in the transmission and reception of messages. That includes sending machines such as your local machine in this instance.

The reason for this is because of the store-and-forward messaging pattern that MSMQ uses.

http://en.wikipedia.org/wiki/Store_and_forward

What is actually happening when you "send" a message to your server is:

  1. The local queue manager writes the message to a local temporary queue.
  2. The local queue manager connects to the remote queue manager.
  3. The message is transmitted.
  4. The remote queue manager writes the message to the remote queue.
like image 100
tom redfern Avatar answered Oct 07 '22 13:10

tom redfern