使用微软消息队列实现C#进程间通信

http://tech.ddvip.com   2007年11月20日    社区交流

内容摘要:顾名思义,微软消息队列(MSMQ)是一种给队列发送消息以便稍后进行处理的方法。消息由一个“Producer”(生产者)应用程序发送出去,再由一个“Consumer”(消费者)应用程序返回。

  列表E

  MessageEnumerator enumerator = queue.GetMessageEnumerator2();
  
  while (enumerator.MoveNext())
  
  enumerator.RemoveCurrent();

  在使用GetMessageEnumerator2方法时,还要考虑另外一个问题,即你要访问队列中增加的任何新消息,即使它们是在你调用GetMessageEnumerator2后再增加的。这假定新消息被添加到队列末尾。

  如果你只希望返回队列中的第一条消息,你应该使用MessageQueue.Receive方法。这个方法会领取队列中的第一条消息,在这个过程中将它从队列中删除。由于消息在读取的时候被删除,你可以确保你的进程是唯一收到消息的进程。Receive方法的应用实例如列表F所示。

  列表F

  System.Messaging.Message message = queue.Receive();

  可以用Peek方法代替Receive方法。Peek方法像Receive方法一样领取队列中的第一条消息;但是,它在队列中保留消息备份。这允许你从队列中删除消息之前检查消息内容。Peek的语法与Receive类似。

  列表G

  System.Messaging.Message message = queue.Peek();

  发送/接收序列化对象

  虽然给队列发送文本的功能非常有用,但队列还允许你发送可序列化对象。这意味着你可以建立一个自定义的.NET类,实例化它的一个实例,将其发送给队列以便其它应用程序使用。要完成这个过程,首先得使用XML Serializer序列化被发送的对象,然后对序列化对象放到消息的正文中。

  例如,假设我们希望给TechRepublic消息队列发送以下对象(列表H):

  列表H

  [Serializable()]
  
  publicclassMessageContent
  
  {
  
  privateDateTime _creationDate = DateTime.Now;
  
  privatestring _messageText;
  
  public MessageContent()
  
  {
  
  }
  
  public MessageContent(string messageText)
  
  {
  
  _messageText = messageText;
  
  }
  
  publicstring MessageText
  
  {
  
  get { return _messageText; }
  
  set { _messageText = value; }
  
  }
  
  publicDateTime CreationDate
  
  {
  
  get { return _creationDate; }
  
  set { _creationDate = value; }
  
  }
  
  }

责编:豆豆技术应用

正在加载评论...