c# 消息队列(四)消息队列的实体Body发生了错误:找不到能够读取消息的格式化程序

一、简介

本博客用以下代码,来阐述我所有的问题。

const string queueName = @".\Private$\FaceSendQueueMsg";     
System.Diagnostics.Process.Start(Environment.CurrentDirectory + "\\FaceRecognition" + "\\IDFaceDemo.exe");
            MessageQueue queue;
            if (MessageQueue.Exists(queueName))//消息队列queueName存在,直接获取这个消息队列的消息
            {
                queue = new MessageQueue(queueName);
                queue .Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) })
                System.Messaging.Message msg = queue.Receive();
                string str = msg.Body.ToString();
                MessageBox.Show("你收到的消息是:{0}", str);
            }
            else //消息队列queueName不存在,就创建一个新的,并获取这个消息队列的消息
            {
                queue = MessageQueue.Create(queueName);
                queue .Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) })
                System.Messaging.Message msg = queue.Receive();
                string str = msg.Body.ToString();
                MessageBox.Show("你收到的消息是:{0}", str);
            

二、消息队列的实体错误

     首先,我用的是C++创建并发送的一个消息队列,然后用C# 接收。在消息队列FaceSendQueueMsg存在并确实有消息的前提下,用C# 接收该消息,单步执行到 string str = msg.Body.ToString();这一步的时候,发现消息队列的实体Body提示“找不到能够读取消息的格式化程序”的错误。

三、错误原因

由于C++的消息队列不是我写,我也不知道消息队列里面是否存在消息或消息到底是什么类型。所以,我一时间想不出来问题出现在什么地方。按理说,直接用

 queue .Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) })

就可以接收所有类型的消息。

但是,我这里就不能接收。

但是,我这里就不能接收。

但是,我这里就不能接收。

百度了下,发现了有类似的问题,但其相关的方法还是不能解决我的问题:

https://www.orcode.com/question/108056_kad1c6.html

于是,我归根结底,去微软官网查了下消息队列。发现可能是实体类型、标签等设置的原因。虽然没有成功解决我的问题,但我还是找到了解决思路。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms711382(v=vs.85).aspx

建议你看英文版,中文版缩水了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值