Подтвердить что ты не робот

MSMQ - очередь сообщений не установлена ​​на этом компьютере

Я написал пример приложения для записи в общедоступные и частные очереди, которые находятся на dev-сервере. У меня нет очереди сообщений, установленной на моей локальной машине.

Я получаю сообщение об ошибке: очередь сообщений на этом компьютере не установлена.

Ошибка в этой строке:

MessageQueue.Exists(queueName)

Вот полный тестовый код, все прокомментированные и незакомментированные частные и общедоступные очереди приводят к той же ошибке. Что я здесь делаю неправильно?

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

    }
}
4b9b3361

Ответ 1

Вам нужно установить MSMQ на ВСЕ машины, которые хотят участвовать в передаче и приеме сообщений. Это включает в себя отправку таких машин, как ваш локальный компьютер.

Причина этого - из-за шаблона обмена файлами store-and-forward, которые использует MSMQ.

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

Что на самом деле происходит при отправке сообщения на ваш сервер:

  • Менеджер локальной очереди записывает сообщение в локальную временную очередь.
  • Менеджер локальной очереди подключается к диспетчеру удаленных очередей.
  • Сообщение передается.
  • Менеджер удаленной очереди записывает сообщение в удаленную очередь.

Ответ 2

Восстановите логику MSMQ службе и вызовите службу из вашего кода, передав сообщение. Таким образом вам нужно только установить MSMQ на сервере.