消息序列化

更新:2007 年 11 月

序列化是获取对象并将其状态信息转换为可存储或可传输形式的过程。序列化的基本思路是对象将其当前状态(通常由其成员变量的值指示)写入永久性存储。以后,通过从存储中读取对象状态或反序列化对象状态,可以重新创建该对象。序列化处理有关在序列化对象时使用的对象指针和循环对象引用的所有详细信息。

在消息队列功能中,序列化专指这样一个过程:将对象或数据集转换为可发送到队列的消息,然后将从队列中检索的消息转换回应用程序可以处理的对象或数据。

格式化程序对象处理 Visual Studio 或 .NET Framework 应用程序中的消息序列化。将消息发送到队列时,格式化程序将对象序列化到可发送到消息队列的流中。当从队列中读取消息时,格式化程序将消息数据反序列化到 Body 属性中。

应当为要发送和接收的数据类型选择适当类型的格式化程序。Visual Studio 和 .NET Framework 附带三种预定义的格式化程序,每种格式化程序旨在保持和取消保持一种不同类型的数据:

  • XmlMessageFormatter 对象使用可读的 XML 字符串将对象和基元数据类型保持到消息中和从消息中取消保持。这是 MessageQueue 组件的默认格式化程序设置。

  • BinaryMessageFormatter 对象将一个或多个连接的对象保持到序列化流中。其结果分析起来非常简洁快速,但人们无法阅读。

  • ActiveXMessageFormatter 对象保持基元数据类型,从而实现与使用“消息队列”早期版本的组件的交互。产生的序列化非常简洁。此格式化程序在设计时考虑了 Windows,并且不会产生人们可以阅读的结果。但它却是一种极为快捷的序列化方法。

默认情况下,当您创建 MessageQueue 组件实例时,会创建一个 XmlMessageFormatter,并且该格式化程序与您创建的实例关联。对 MessageQueue 实例调用 Send 方法时,会使用此格式化程序对消息正文进行序列化。发送期间,不必为使用格式化程序编写任何额外的代码。

读取消息要稍微复杂一些。若要使用格式化程序从队列中读取,必须设置属性以指示应如何处理消息正文。如果使用的是 XmlMessageFormatter 对象,请设置 TargetTypesTargetTypeNames 属性。如果使用的是 BinaryMessageFormatter 对象,请设置一系列不同的属性。ActiveXMessageFormatter 对象没有关联的属性。有关更多信息,请参见读取和接收消息

如果需要处理不同类型的数据,除了使用 Visual Studio 和 .NET Framework 附带的格式化程序外,还可以创建自己的格式化程序。可将格式化程序导入项目,并使用代码访问它。

通过为要处理的队列、消息或 MessageQueue 组件设置 Formatter 属性,选择要使用的格式化程序。

XML 消息格式设置的优点

XML 格式设置的优点之一是可以读取在序列化对象或数据时创建的字符串。这意味着如果发生了一些情况而无法从消息队列中取消保持消息,可查看消息本身并可能修复问题。

另一个优点是使用此格式化程序序列化的消息不必用同一个格式化程序对象反序列化。也就是说,如果双方知道数据的结构,接收方就不必拥有同发送方相同的格式化程序类。另外,由 XML 格式化程序序列化的消息不一定非要反序列化。大多数浏览器和其他 XML 查看器均可分析 XML 消息。

请参见

任务

如何:创建 MessageQueue 组件实例

其他资源

发送和序列化消息