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

 

posted on 2010-03-19 11:50  梅桦  阅读(1919)  评论(1编辑  收藏  举报