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());