向 MSMQ 发送 XML 条消息,不带任何格式

Send XML message to MSMQ without any formatting

我需要将 XMLDocument 对象发送到 MSMQ。我没有 class 来反序列化它(xml 可能会有所不同)。默认格式化程序 XMLMessageFormatter 将“漂亮地打印”对象。这会导致问题,因为

<text></text>

将转换为

<text>

</text>

(即 cr + 空格)。该消息正在由使用默认 XMLMessageFormatter 的进程读取,并且当节点中有数据时这不是问题。然而,这是一个问题,因为一个进程(不受我的控制)会将这些新字符解释为数据并导致错误。

我知道我可以编写一些代码来使用 IsEmpty = true 来转换它们 <text /> 但我想要一个完全不改变对象的解决方案。

BinaryMessageFormatter 将使用 BOM 数据作为数据前缀(接收方不希望如此)并且 ActiveXMessageFormatter 将双字节字符串(再次导致另一端出现问题)。

我宁愿避免编写自定义消息格式化程序。我试过在 XMLMessageFormatter 中包含一些选项,但收效甚微。任何想法将不胜感激。

MSMQ 对原始 blob 进行操作。除非你愿意,否则你不必使用格式化程序。

要发送一条消息并逐字节返回,请使用 BodyStream property.

示例:

var queue = new MessageQueue(@".\private$\queueName");
var msg = new Message();
msg.BodyStream = new MemoryStream(Encoding.UTF8.GetBytes("<root><test></test></root>"));
queue.Send(msg);

结果消息: