MSMQ接受时出现异常
时间:2011-12-17
来源:互联网
两个应用程序,一个输入数据,另一个接受数据
如果在一个应用中同时发送接收能够收到数据,分开两个应用就会引发异常:“System.InvalidOperationException”类型的异常
代码如下:
msmq类
C# code
发送
C# code
接受,这里尝试了同步和异步接受,同步的已经注释
C# code
如果在一个应用中同时发送接收能够收到数据,分开两个应用就会引发异常:“System.InvalidOperationException”类型的异常
代码如下:
msmq类
C# code
using System; using System.Linq; using System.Messaging; namespace MSMQ { public delegate void Deal(string msg); public class DbQueue { public MessageQueue mq; public Deal deal; public ReceiveCompletedEventHandler deal2; public DbQueue() { try { if (MessageQueue.Exists(@".\Private$\DBWrite")) mq = new MessageQueue(@".\Private$\DBWrite"); else mq = MessageQueue.Create(@".\Private$\DBWrite"); } catch (MessageQueueException e) { Console.WriteLine(e.Message); } } public void Send(string msg) { mq.Send(msg); Console.WriteLine("发送消息:" + msg); } public void Receive() { while (true) { while (mq.GetAllMessages().Count() > 0) { Console.Write("共有" + mq.GetAllMessages().Count().ToString() + "条"); //Message msg = mq.Receive(); //同步接收 mq.BeginReceive(); mq.ReceiveCompleted += deal2; //Object obj = msg.Body; //deal(obj.ToString()); } Console.WriteLine("等待中"); } } public void ReadAll() { foreach (Message m in mq) { string result = m.Body.ToString(); Console.WriteLine(result); } } } }
发送
C# code
using System; namespace MSMQ { class Program { static void Main(string[] args) { DbQueue q = new DbQueue(); while (true) { Console.Write("输入发送字符串:"); string msg=Console.ReadLine(); q.Send(msg); q.ReadAll(); } Console.ReadKey(); } } }
接受,这里尝试了同步和异步接受,同步的已经注释
C# code
using System; using MSMQ; using System.Threading; using System.Messaging; namespace MSMQ_receiver { class Program { static void Main(string[] args) { DbQueue db = new DbQueue(); db.deal = new Deal(ConcentDeal); db.deal2 = new ReceiveCompletedEventHandler(MyAsyncReceiver); Thread me = new Thread(new ThreadStart(db.Receive)); me.Start(); //db.ReadAll(); } public static void ConcentDeal(string msg) { Console.WriteLine("处理中……"); Thread.Sleep(new Random().Next(1000)); Console.WriteLine("收到消息:" + msg); } public static void MyAsyncReceiver(object resouce,ReceiveCompletedEventArgs args) { MessageQueue mq=resouce as MessageQueue; Message obj=mq.EndReceive(args.AsyncResult); //就是这里异常了 Console.WriteLine("收到的消息为:"+obj.Body.ToString()); //这里报错:找不到能够读取此消息的格式化程序。 } } }
作者: popo0027 发布时间: 2011-12-17
没有用过,但是帮你顶一块学习,
作者: ximenwuji 发布时间: 2011-12-18
最起码地,MSMQ需要把各级MSMQ服务器、客户端驱动都预先安装好,测试没有问题。不是在程序里写个语句就能行了。
作者: sp1234 发布时间: 2011-12-18
其实所谓“消息中间件”是一种过气的“技术”,只是在一些比较陈旧的系统中需要维护,因为过去MQ的接口总是比socket编程要简单许多。今天的通讯技术很多、封装的也很简洁清爽,那么MQ这类东西就显得弊大于利了。
作者: sp1234 发布时间: 2011-12-18
http://www.csharpwin.com/csharpspace/1659.shtml
http://msdn.microsoft.com/zh-cn/library/system.messaging.messagequeue(v=VS.85).aspx
http://msdn.microsoft.com/zh-cn/library/system.messaging.messagequeue(v=VS.85).aspx
作者: chen_ya_ping 发布时间: 2011-12-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28