public MsmqMessageQueue(string serverName, Queue queue)
        {
            Queue = queue;

            Main = Msmq.Create(serverName, queue.Name, QueueAccessMode.ReceiveAndAdmin);

            _mainContent = Msmq.Create(serverName, queue.Name, QueueAccessMode.ReceiveAndAdmin);
            _mainContent.MessageReadPropertyFilter.ClearAll();
            _mainContent.MessageReadPropertyFilter.Body = true;


            if (Main.UseJournalQueue) // Error when trying to use FormatName, strange as it should work according to MSDN. Temp solution for now.
            {
                Journal = new MessageQueue(string.Format(@"{0}\Private$\{1};JOURNAL", serverName, queue.Name));

                _journalContent = new MessageQueue(string.Format(@"{0}\Private$\{1};JOURNAL", serverName, queue.Name));
                _journalContent.MessageReadPropertyFilter.ClearAll();
                _journalContent.MessageReadPropertyFilter.Body = true;
            }
        }
Exemplo n.º 2
0
        public bool CanAccessQueue(Dictionary <string, object> connectionSettings, string queueName)
        {
            var queue = Msmq.Create(connectionSettings["server"] as string, queueName, QueueAccessMode.ReceiveAndAdmin);

            return(queue != null ? queue.CanRead : false);
        }
Exemplo n.º 3
0
        public override MessageSubscription[] GetMessageSubscriptions(Dictionary <string, object> connectionSettings, IEnumerable <string> queues)
        {
            var server = connectionSettings[CS_SERVER] as string;
            List <MessageSubscription> r = new List <MessageSubscription>();

            // Raven Persistance
            var ravenUrl = (string)connectionSettings.GetValue(NServiceBus_MSMQ_Manager.CS_RAVEN_PERSISTANCE, null) ?? "http://" + server + ":8080";
            var db       = new DocumentStore {
                Url = ravenUrl
            };

            db.Initialize();

            // MSMQ Persistance
            var msmqQ = MessageQueue.GetPrivateQueuesByMachine(server).Where(q => q.QueueName.EndsWith(".subscriptions")).Select(q => q.QueueName);

            foreach (var queueName in queues)
            {
                var queueSubscr = queueName + ".subscriptions";

                // First check MSMQ
                if (msmqQ.Any(mq => mq.EndsWith(queueSubscr)))
                {
                    MessageQueue q = Msmq.Create(server, queueSubscr, QueueAccessMode.ReceiveAndAdmin);

                    q.MessageReadPropertyFilter.Label = true;
                    q.MessageReadPropertyFilter.Body  = true;

                    try {
                        foreach (var msg in q.GetAllMessages())
                        {
                            var itm = new MessageSubscription();
                            itm.FullName   = GetSubscriptionType(ReadMessageStream(msg.BodyStream));
                            itm.Name       = ParseClassName(itm.FullName);
                            itm.Subscriber = msg.Label;
                            itm.Publisher  = queueName;

                            r.Add(itm);
                        }
                    } catch (Exception e) {
                        OnError("Error occured when getting subcriptions", e, true);
                    }
                }
                else // RavenDB

                {
                    var headers = db.DatabaseCommands.Head("Raven/Databases/" + queueName);
                    if (headers != null)
                    {
                        using (var s = db.OpenSession(queueName)) {
                            //s.Advanced.AllowNonAuthoritativeInformation = false;
                            //var doc = s.Load<Subscription>("subscriptions/88dc7793-0cbd-ec39-5dd2-6b982e1e3c76");
                            //if( doc != null )
                            //  Console.Write("WOW");

                            var list = s.Advanced.LoadStartingWith <Subscription>("subscription", null, 0, 1024).ToArray();

                            foreach (var subr in list) //.StartsWith("Subscriptions/")) ) {

                            {
                                foreach (var client in subr.Clients)
                                {
                                    var itm = new MessageSubscription();
                                    itm.FullName   = subr.MessageType.ToString();
                                    itm.Name       = ParseClassName(itm.FullName);
                                    itm.Subscriber = client.ToString();
                                    itm.Publisher  = queueName;

                                    r.Add(itm);
                                }
                            }
                        }
                    }
                }
            }



            //foreach( var queueName in MessageQueue.GetPrivateQueuesByMachine(server).
            //                                      Where(q => q.QueueName.EndsWith(".subscriptions")).Select(q => q.QueueName) ) {

            //}

            return(r.ToArray());
        }