Msmq Send () работает, но не может посмотреть () или получить () с удаленного сервера - PullRequest
0 голосов
/ 15 июня 2019

Я хочу настроить msmq для удаленного ввода и получения сообщений.Сервер, который я хочу иметь в частной очереди, работает на операционной системе Windows Server 2016. Я успешно выполнял свою работу до тех пор, пока сообщение не будет вставлено удаленно

Чего я не могу достичь, так это Peek () вчастная очередь или удаленное получение сообщений из частной очереди

Когда я отлаживал код, я обнаружил, что значение canRead в объекте messageQueue равно false

Я попытался изменить режим доступаПолучать, SendAndReceive, Peek, ReceiveAndAdmin, PeekAndAdmin буквально все доступные режимы, но все режимы заканчивают тем, что дают значение для canRead как false

Включено входящее правило для порта 1801

Включили входящие и исходящие правила для портов 135, 2103, 2105

Удаленный сервер размещен через облачную консоль Google и, следовательно, добавил правила брандмауэра (вход) для всех портов, которые были упомянуты выше.

Удаленный сервер работает на сервере Windows 2016 Система, в которой я запускаю код для тестирования, работает на Windows 10 Pro

    private static string QueueName = "FormatName:Direct=TCP:Rdp public Ip Address\\private$\\taskQueue";
        public MsmQueue getMsmq()
        {
            MessageQueue msgQ = new MessageQueue(QueueName);
            MsmQueue msmq  = new MsmQueue();

            if (IsQueueEmpty())
            {
                return msmq;
            }

            Object o = new Object();
            System.Type[] arrTypes = new System.Type[2];
            arrTypes[0] = msmq.GetType();
            arrTypes[1] = o.GetType();
            msgQ.Formatter = new XmlMessageFormatter(arrTypes);
            msmq = ((MsmQueue)msgQ.Receive().Body);

            return msmq;
        }
        private bool IsQueueEmpty()
        {
            bool isQueueEmpty = false;


            try
            {
                MessageQueue msgQ = new MessageQueue(QueueName, QueueAccessMode.Peek);
                Message message = msgQ.Peek();   // the code breaks at this point and throws the exception. 
                isQueueEmpty = false;
            }

            catch (MessageQueueException e)
            {
                if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
                {
                    isQueueEmpty = true;
                }
            }
            return isQueueEmpty;
        }

Я ожидаю получить сообщение, которое находится внутри msmq, вместо этого я получаю вот этоисключение Очередь не существует или у вас недостаточно прав для выполнения операции

...