生活就是点点滴滴

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  接手一新项目,写一个服务。一个线程间断调用webservice返回XML分解放入消息队列中,另一个线程抓消息队列中的消息生成Request调Webservice外发。其中对消息队列的安装不说。

代码
 1 //跨线程的全局定义
 2 MessageQueue queue = new MessageQueue(@".\private$\hrsReservation");
 3 queue.Formatter = new XmlMessageFormatter();
 4 
 5 //线程一里包括分解xml装入消息队列的操作
 6 Message msg = new Message();
 7 msg.Formatter = queue.Formatter;
 8 msg.Label = "hrs";
 9 msg.Body = resProcess;
10 queue.Send(msg);
11 
12 //线程二里包括取出消息操作
13 if(!MessageQueueProcess.IsQueueEmpty(queue))
14     {
15         Message recivedMsg = queue.Receive();
16     }
17 else
18     {
19         Thread.Sleep(ConfigerFile.RefreshTime)
20     }
21 
22 //消息判空
23 class MessageQueueProcess
24     {
25         public static bool IsQueueEmpty(MessageQueue mq)
26         {
27             bool IsQueueEmpty = false;
28 
29             try
30             {
31                 mq.Peek(new System.TimeSpan(0));
32             }
33             catch (MessageQueueException e)
34             {
35                 if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
36                 {
37                     IsQueueEmpty = true;
38                 }
39             }
40             return IsQueueEmpty;
41         }
42     }

  似乎队列为空的情况下peek或者recieve方法会挂起,所以应该不需要判空sleep。而且调试中出现了挂起,不过不知道会不会引发其他的问题,因为对此不甚了解。所以就人为控制了。哪位老鸟精通此道,望不略赐教。

  

posted on 2010-01-20 15:26  生活就是点点滴滴  阅读(490)  评论(0编辑  收藏  举报