win7访问远端Windows Server 2008R2消息队列拒绝

本文介绍了在Win7系统下访问Windows Server 2008R2消息队列时遇到的拒绝访问问题及解决步骤,包括:检查消息队列权限设置、修改注册表项、开启入站规则、允许远程RPC调用等。通过这些设置,实现了远程消息的发送和接收。但当系统不在同一域或工作组时,可能会出现问题,文中也给出了可能的原因和建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

下面是我的创建消息队列的代码,放在服务器端运行:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Messaging;

namespace MSMQBuilder
{
    class Program
    {
        static void Main(string[] args)
        {
            MessageQueue mq = null;
            //显示创建自身的消息队列
            const string queueName = @".\Private$\jiyiqin";
            if (!MessageQueue.Exists(queueName))
            {
                mq = System.Messaging.MessageQueue.Create(queueName);
                Console.WriteLine("创建消息队列完成:" + queueName);
            }
            else
            {
                mq = new System.Messaging.MessageQueue(queueName);
            }
            mq.SetPermissions("Administrator", MessageQueueAccessRights.FullControl);
            mq.SetPermissions("ANONYMOUS LOGON", MessageQueueAccessRights.FullControl);
            mq.SetPermissions("Everyone", MessageQueueAccessRights.FullControl);
        }
    }
}

下面是我的发送消息和去远端服务器的消息队列查询消息的代码,在win7上面运行:

using System;
using System.Messaging;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using CBIP.CProxy.AsyncMsgSender;

namespace ClientNTService1
{
    class Program
    {
        static void Main(string[] args)
        {
            SendMsg();

            ReceiveMsg();
        }

        static void SendMsg()
        {
            const string queueName = @"FormatName:Direct=TCP:192.168.1.108\Private$\jiyiqin";
            AsyncMessage message = new AsyncMessage
            {
                UserID = 352,
                MessageReceiver = "某某某接受者",
                MessageSender = "CMS Administrator",
                MessageSendIP = "192.168.0.1",
                SendTime = DateTime.Now.ToString(),
                MessageCode = "109001001",
                MessageBody = "CMS测试消息,内容包含超链接 http://bbs.jlitrdc.com/bbs/ ,点击跳转"
            };

            try
            {
                //将异步消息发往指定的消息队列
                using (MessageQueue msmq = new MessageQueue(queueName))
                {
                    msmq.Formatter = new XmlMessageFormatter(new Type[] { typeof(AsyncMessage) });
                    System.Messaging.Message msg = new Message() { Label = "业务模块异步消息", Body = message };
                    msmq.Send(msg);
                }
            }
            catch (Exception ee)
            {
                Console.WriteLine(String.Format("消息发送失败,原因是:{0}", ee.Message));
            }

            Console.WriteLine("发送完成,按任意键退出...");
            //Console.ReadKey();
            
        }

        static void ReceiveMsg()
        {
            const string queueName = @"FormatName:Direct=TCP:192.168.1.108\Private$\jiyiqin";
            //while (true)
            //{
            MessageQueue MQ = new MessageQueue(queueName);

            System.Messaging.Message message = null;
            try
            {
                message = MQ.Receive(TimeSpan.FromSeconds(3));
            }
            catch (Exception ee)
            {
                message = null;
                Console.WriteLine("从消息队列轮训消息出现异常,原因是:" + ee.Message);
                //continue; 
            }

            if (message != null)
            {
                message.Formatter = new XmlMessageFormatter(new Type[] { typeof(AsyncMessage) });
                AsyncMessage msg = (AsyncMessage)message.Body;
                Console.WriteLine("轮训线程接收到一个异步消息: UserID is " + msg.UserID);
            }
            //}
        }
    }
}

运行之后提示: Access to remote messaging queue is denied。 Windows Server 2003没有这个问题。

<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值