System.Messaging 名字空间下包含了用于连接到、监视和管理网络上的消息队列,并发送、接收或查看消息的类。
其中一个主要的类是MessageQueue
它提供对消息队列上的消息进行访问。
它有很多成员。例如:
·Send方法,用于向队列中写入消息。
·Receive,ReceiveById,ReceiveByCorrelationId方法,用于从队列中读取消息。
·Peek,与Receive相似,只是不更改队列内容,就是在赢取消息时不会从队列中移除消息
·BeginPeek,异步读取消息
还提供了其它功能:
·创建和删除消息队列的队列
·通过枚举逐个访问队列中的消息
·通过枚举循环访问系统队列
·设置基于ACL访问权限
·使用连接缓存
另一个类是:Message
Message类可以对消息进行详尽的控制,且是队列接收或查看消息时使用的对象。除了消息正文外,这个类的属性还包括确认设置,格式化程序选择,标识,身份验证,加密信息,时间戳,服务器日记,不负死信队列的指示以及事务。
简单类型的发送与接收
(1)创建队列
private MessageQueue CreateQueue()
{
string trPath=@".\Private$\SelfPrivateDemo";
MessageQueue _queue;
if (!MessageQueue.Exists(trPath))
return MessageQueue.Create(trPath);
_queue = new MessageQueue(trPath);
return _queue;
}
这里创建队列对象,然后可以通过队列进行发送和接收等操作。
(2)发送字符串
public void SendMessage(string strMsg)
{
MessageQueue _queue = CreateQueue();
Message _message = new Message(strMsg);
_queue.Send(_message);
}
(3)接收字符串
public string ReceiveMessage()
{
MessageQueue _queue = CreateQueue();
Message _message=_queue.Receive();
_message.Formatter =
new XmlMessageFormatter(new Type[] { typeof(string) });
return _message.Body.ToString();
}
这里解析队列消息时要用到格式化器
(4)测试
mm.SendMessage("Hello,江");
这里在消息队列管理控制台中可以看到添加了队列消息,可以查看一下它的内容:
<?xml ver sion="1.0"?>
<string>Hello ,æ±</string>
大概是这段xml。因为传递消息用到了中文字符,这里又采用了文字编码,所以是乱码状态。
在接收时,string strMsg = mm.ReceiveMessage();
会得到消息队列中的消息,并按格式化器解析为正确的类型。
消息Message对象可以设置正文Body,也可以设置和获取很多属性。
Console.WriteLine("消息标识:{0}",_message.Id);
Console.WriteLine("消息类型:{0}", _message.MessageType.ToString());