void watchQueueCallback(IAsyncResult ar) { // Retrieve the delegate. watchQueueDelegate dlgt = (watchQueueDelegate)ar.AsyncState; // Call EndInvoke to retrieve the results. dlgt.EndInvoke(ar); }
public void Start() { try { string queueSizeCheckMilliseconds = ConfigurationManager.AppSettings["QueueSizeCheckIntervalInMilliseconds"]; _keepTabsOnQueueSizeCounter = new System.Timers.Timer((queueSizeCheckMilliseconds == null) ? _queueSizeCheckMilliseconds : Convert.ToInt32(queueSizeCheckMilliseconds)); _keepTabsOnQueueSizeCounter.Start(); //you’ll want to use a MessageReadPropertyFilter in order to basically filter out all the data to keep the foot print small. _countFilter.AdministrationQueue = false; _countFilter.ArrivedTime = false; _countFilter.CorrelationId = false; _countFilter.Priority = false; _countFilter.ResponseQueue = false; _countFilter.SentTime = false; _countFilter.Body = false; _countFilter.Label = false; _countFilter.Id = false; _keepTabsOnQueueSizeCounter.Elapsed += new System.Timers.ElapsedEventHandler(_keepTabsOnQueueSizeCounter_Elapsed); string minThreads = ConfigurationManager.AppSettings["MinThreads"]; string maxThreads = ConfigurationManager.AppSettings["MaxThreads"]; //don't forget to start the threadpool... _tp.MinThreads = minThreads == null ? _minThreads : Convert.ToInt32(minThreads); _tp.MaxThreads = maxThreads == null ? _maxThreads : Convert.ToInt32(maxThreads); _tp.Start(); string messageQueueSetting = ConfigurationManager.AppSettings["queueName"]; _queueName = messageQueueSetting == null ? null : messageQueueSetting; if (_queueName == null) { throw new ApplicationException("No valid queueName setting in the Configuration File"); } // Create a transaction queue using System.Messaging API if (!MessageQueue.Exists(_queueName)) { MessageQueue.Create(_queueName, true); } //Connect to the queue MessageQueue Queue = new MessageQueue(_queueName); System.Messaging.MessageQueue.EnableConnectionCache = false; watchQueueDelegate dlgt = new watchQueueDelegate(watchQueue); IAsyncResult ar = dlgt.BeginInvoke(_queueName, new AsyncCallback(watchQueueCallback), dlgt); _log.Debug("AuditMSMQProcessingService is running"); } catch (Exception ex) { _log.Fatal(ex); } }