接手一新项目,写一个服务。一个线程间断调用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 }
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。而且调试中出现了挂起,不过不知道会不会引发其他的问题,因为对此不甚了解。所以就人为控制了。哪位老鸟精通此道,望不略赐教。