问题:
下面是我的创建消息队列的代码,放在服务器端运行:
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没有这个问题。
<