0

我正在使用 MSMQ 来传递 XML。但是,我想让队列更通用,让它接受类实例作为消息。这让人想起对二进制格式化程序的需求。

我一直在阅读有关二进制格式化程序和 MSMQ 的信息。似乎通过使用二进制格式化程序,我正在让 MSMQ 做一些它真的不打算做的事情。换句话说,我现在在 MSMQ 上传递基于二进制的数据,而它想要非常轻量级且基于字符串。还是我错了?

我读到的是更复杂类型的数据(即二进制)应该存储在数据库中。但是,这可能会带来其自身的问题,因为此数据是可序列化的。

我传递的数据不是基于流的。

如果我要利用 MSMQ,它是否应该严格用于基于字符串的消息而不是二进制消息?

4

1 回答 1

0

似乎通过使用二进制格式化程序,我正在让 MSMQ 做一些它真的不打算做的事情。

你被误导了。事实上,MSMQ 附带了它自己的BinaryMessageFormatter类,它显然是为了在您想以牺牲一些灵活性为代价来提高速度时使用。

文档有这样的说法:

BinaryMessageFormatter 非常高效,可用于序列化大多数对象。结果非常紧凑且解析速度很快,但不允许像 XmlMessageFormatter那样松散耦合的消息传递。松散耦合意味着客户端和服务器可以独立地对发送和接收的类型进行版本控制。

当应用程序使用 MessageQueue 类的实例向队列发送消息时,格式化程序将对象序列化为流并将其插入到消息正文中。当使用 MessageQueue 从队列中读取数据时,格式化程序将消息数据反序列化为 Message 的 Body 属性。

BinaryMessageFormatter 提供比 XmlMessageFormatter 更快的吞吐量。当需要纯速度而不是松散耦合的消息传递时,请使用 BinaryMessageFormatter。

于 2013-09-05T21:24:19.580 回答