【发布时间】:2023-03-25 23:27:01
【问题描述】:
我在基本的 Microsoft 消息队列实现中遇到以下问题:
在阅读端,消息的Formatter 属性始终为空,无论我在发送端输入什么。
发送代码:
System.Messaging.Message m = new System.Messaging.Message("string to send");
m.Formatter = new XmlMessageFormatter( new Type[1] { typeof(string) } );
queue.Send(m, "label");
接收代码:
MessageEnumerator enumerator = queue.GetMessageEnumerator2();
while (enumerator.MoveNext())
{
Message m = enumerator.RemoveCurrent();
Console.WriteLine("MSQ: " + m.Label);
Console.WriteLine("Formatter: " + m.Formatter.GetType().ToString()); // crash because formatter property is null
Console.WriteLine("Body: " + m.Body); //also crashes since formatter is null
}
由于Formatter 为空,我也无法获得m.Body,这是我最需要的。
【问题讨论】:
-
但是...消息是使用 MessageQueue.Formatter 属性“反序列化”的,不是吗?如果有,是否在接收代码中初始化了MessageQueue.Formatter属性(queue.Formatter)?
-
@JuanMellado:不,我没有。实际上我认为这是自动完成的,因为在文档中它说它默认为 XmlMessageFormatter
-
是的,但你仍然可以这样做
((XmlMessageFormatter)queue.Formatter).TargetTypes = new Type[1] { typeof(string) };[未测试] -
是的,这行得通!谢谢!如果您将其发布为答案,我可以奖励您赏金。
标签: c# .net ipc message-queue