示例#1
0
        void PurgeMessages(Queue queue)
        {
            var isOk = IsOkWithUser("This will delete all the messages from the queue {0} - press OK to continue...",
                                                         queue.QueueName);

            if (!isOk)
            {
                return;
            }

            Task.Factory
                .StartNew(() =>
                    {
                        try
                        {
                            using (var msmqQueue = new MessageQueue(queue.QueuePath))
                            {
                                msmqQueue.Purge();
                            }

                            return new
                                       {
                                           Notification =
                                               NotificationEvent.Success("Queue {0} was purged", queue.QueueName),
                                           Success = true,
                                       };
                        }
                        catch (Exception e)
                        {
                            return new
                                       {
                                           Notification = NotificationEvent.Fail(e.ToString(),
                                                                                 "Something went wrong while attempting to purge queue {0}",
                                                                                 queue.QueueName),
                                           Success = false,
                                       };
                        }
                    })
                .ContinueWith(r =>
                    {
                        var result = r.Result;

                        Messenger.Default.Send(result.Notification);

                        if (result.Success)
                        {
                            Messenger.Default.Send(new QueuePurged(queue));
                        }
                    }, Context.UiThread);
        }
示例#2
0
        void DeleteQueue(Queue queue)
        {
            var isOk = IsOkWithUser("This will DELETE the queue {0} completely - press OK to continue...",
                                                         queue.QueueName);

            if (!isOk)
            {
                return;
            }

            Task.Factory
                .StartNew(() =>
                    {
                        try
                        {
                            MessageQueue.Delete(queue.QueuePath);

                            return new
                                       {
                                           Success = true,
                                           Notification = NotificationEvent.Success("Queue {0} was deleted", queue.QueueName)
                                       };
                        }
                        catch (Exception e)
                        {
                            return new
                                       {
                                           Success = false,
                                           Notification = NotificationEvent.Fail(e.ToString(),
                                                                                 "Something went wrong while attempting to delete queue {0}",
                                                                                 queue.QueueName),
                                       };
                        }
                    })
                .ContinueWith(r =>
                    {
                        var result = r.Result;

                        Messenger.Default.Send(result.Notification);

                        if (result.Success)
                        {
                            Messenger.Default.Send(new QueueDeleted(queue));
                        }
                    }, Context.UiThread);
        }
示例#3
0
        void LoadMessages(Queue queue)
        {
            Task.Factory
                .StartNew(() =>
                              {
                                  var messageQueue = new MessageQueue(queue.QueuePath);
                                  messageQueue.MessageReadPropertyFilter = DefaultFilter();

                                  var list = new List<Message>();

                                  using (var enumerator = messageQueue.GetMessageEnumerator2())
                                  {
                                      while (enumerator.MoveNext())
                                      {
                                          var message = enumerator.Current;
                                          list.Add(GenerateMessage(message, queue.QueuePath));
                                      }
                                  }

                                  return new { Messages = list };
                              })
                .ContinueWith(t =>
                                  {
                                      if (!t.IsFaulted)
                                      {
                                          var result = t.Result;

                                          queue.SetMessages(result.Messages);

                                          return NotificationEvent.Success("{0} messages loaded from {1}",
                                                                           result.Messages.Count,
                                                                           queue.QueueName);
                                      }

                                      var details = t.Exception.ToString();
                                      return NotificationEvent.Fail(details, "Could not load messages from {0}: {1}",
                                                                    queue.QueueName,
                                                                    t.Exception);
                                  }, Context.UiThread)
                .ContinueWith(t => Messenger.Default.Send(t.Result), Context.UiThread);
        }
示例#4
0
 public DeleteQueueRequested(Queue queue)
 {
     this.queue = queue;
 }
 public UpdateMessageRequested(Message message, Queue queue)
 {
     this.message = message;
     this.queue = queue;
 }
示例#6
0
 public QueueDeleted(Queue queue)
 {
     this.queue = queue;
 }
示例#7
0
 public PurgeMessagesRequested(Queue queue)
 {
     this.queue = queue;
 }
示例#8
0
        void UpdateMessage(Message message, Queue queueToReload)
        {
            Task.Factory
                .StartNew(() =>
                    {
                        if (!message.CouldDeserializeBody)
                        {
                            throw new InvalidOperationException(
                                string.Format(
                                    "Body of message with ID {0} was not properly deserialized, so it's not safe to try to update it...",
                                    message.Id));
                        }

                        using (var queue = new MessageQueue(message.QueuePath))
                        {
                            queue.MessageReadPropertyFilter = LosslessFilter();
                            using (var transaction = new MessageQueueTransaction())
                            {
                                transaction.Begin();
                                try
                                {
                                    var msmqMessage = queue.ReceiveById(message.Id, transaction);

                                    var newMsmqMessage =
                                        new System.Messaging.Message
                                            {
                                                Label = msmqMessage.Label,
                                                Extension = msmqMessage.Extension,

                                                TimeToBeReceived = msmqMessage.TimeToBeReceived,
                                                UseDeadLetterQueue = msmqMessage.UseDeadLetterQueue,
                                                UseJournalQueue = msmqMessage.UseJournalQueue,
                                            };

                                    EncodeBody(newMsmqMessage, message);

                                    queue.Send(newMsmqMessage, transaction);

                                    transaction.Commit();
                                }
                                catch
                                {
                                    transaction.Abort();
                                    throw;
                                }
                            }
                        }

                        return new
                                   {
                                       Message = message,
                                       Queue = queueToReload,
                                       Notification =
                                           NotificationEvent.Success("Fetched message with ID {0} and put an updated version back in the queue", message.Id),
                                   };
                    })
                .ContinueWith(a =>
                    {
                        if (a.Exception != null)
                        {
                            Messenger.Default.Send(NotificationEvent.Fail(a.Exception.ToString(),
                                                                          "Something went wrong while attempting to update message with ID {0}",
                                                                          message.Id));

                            return;
                        }

                        var result = a.Result;
                        Messenger.Default.Send(new ReloadMessagesRequested(result.Queue));
                        Messenger.Default.Send(result.Notification);
                    }, Context.UiThread);
        }
 public ReloadMessagesRequested(Queue queue)
 {
     this.queue = queue;
 }
示例#10
0
 public QueuePurged(Queue queue)
 {
     this.queue = queue;
 }