123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- using Dto;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Configuration;
- using System.Data;
- using System.Diagnostics;
- using System.Linq;
- using System.Messaging;
- using System.ServiceProcess;
- using System.Text;
- using System.Threading.Tasks;
- namespace HardWorkingService
- {
- public partial class HardWorkingService : ServiceBase
- {
- #region OperationMessageQueue
- private MessageQueue _OperationMessageQueue;
- protected MessageQueue OperationMessageQueue
- {
- get
- {
- if (_OperationMessageQueue == null)
- {
- _OperationMessageQueue = new MessageQueue(ConfigurationManager.AppSettings["OperationMessageQueuePath"]);
- _OperationMessageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(QueuedWorkItem) });
- _OperationMessageQueue.ReceiveCompleted += Mq_ReceiveCompleted;
- }
- return _OperationMessageQueue;
- }
- }
- #endregion
- private void Mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
- {
- using (var msg = OperationMessageQueue.EndReceive(e.AsyncResult))
- {
- try
- {
- var qItem = msg.Body as QueuedWorkItem;
- ProcessQueuedWorkItem(qItem);
- }
- catch (Exception ex)
- {
- //TODO : Write to the log we failed in some way
- Environment.Exit(Environment.ExitCode);
- }
- }
- OperationMessageQueue.BeginReceive();
- }
- private void ProcessQueuedWorkItem(QueuedWorkItem item)
- {
- //ok, so obviously here is where you're going to do your long-running logic.
- //for purposes of this demo, we're just going to do some bogus work
- NamedPipe.Sender.SendMessage(String.Format("Starting work on {0}", item.Name));
- var delay = new TimeSpan(0,0,3);
- for(var i = 0; i < 5; i++)
- {
- NamedPipe.Sender.SendMessage(String.Format("beginning work on item {0} of 5 for {1}", i, item.Name));
- System.Threading.Thread.Sleep(delay);
- NamedPipe.Sender.SendMessage(String.Format("completed work on item {0} of 5 for {1}", i, item.Name));
- }
- NamedPipe.Sender.SendMessage(String.Format("Completed work on {0}", item.Name));
- }
- public HardWorkingService()
- {
- InitializeComponent();
- }
- protected override void OnStart(string[] args)
- {
- OperationMessageQueue.BeginReceive();
- }
- protected override void OnStop()
- {
- OperationMessageQueue.ReceiveCompleted -= Mq_ReceiveCompleted;
- OperationMessageQueue.Dispose();
- }
- protected override void OnPause()
- {
- OperationMessageQueue.ReceiveCompleted -= Mq_ReceiveCompleted;
- }
- protected override void OnContinue()
- {
- OperationMessageQueue.ReceiveCompleted += Mq_ReceiveCompleted;
- OperationMessageQueue.BeginReceive();
- }
- }
- }
|