public static void Test(ITransport t, IQueueStrategy strategy,
            Endpoint queueEndpoint, Action<Message> send, Func<MessageEnumerator>
            enumer)
        {
            Guid id = Guid.NewGuid();
            var serializer = new XmlMessageSerializer(new
                                                          DefaultReflection(), new DefaultKernel());

            var subscriptionStorage = new MsmqSubscriptionStorage(new
                                                                      DefaultReflection(),
                                                                  serializer,
                                                                  queueEndpoint.Uri,
                                                                  new
                                                                      EndpointRouter(),
                                                                  strategy);
            subscriptionStorage.Initialize();

            var wait = new ManualResetEvent(false);

            subscriptionStorage.SubscriptionChanged += () => wait.Set();

            t.AdministrativeMessageArrived +=
                subscriptionStorage.HandleAdministrativeMessage;

            Message msg = new MsmqMessageBuilder
                (serializer).BuildFromMessageBatch(new
                                                                     AddInstanceSubscription
                {
                    Endpoint = queueEndpoint.Uri.ToString(),
                    InstanceSubscriptionKey = id,
                    Type = typeof (TestMessage2).FullName,
                });
            send(msg);

            wait.WaitOne();

            msg = new MsmqMessageBuilder
                (serializer).BuildFromMessageBatch(new
                                                                     RemoveInstanceSubscription
                {
                    Endpoint = queueEndpoint.Uri.ToString(),
                    InstanceSubscriptionKey = id,
                    Type = typeof (TestMessage2).FullName,
                });

            wait.Reset();

            send(msg);

            wait.WaitOne();

            IEnumerable<Uri> uris = subscriptionStorage
                .GetSubscriptionsFor(typeof (TestMessage2));
            Assert.Equal(0, uris.Count());

            int count = 0;
            MessageEnumerator copy = enumer();
            while (copy.MoveNext()) count++;
            Assert.Equal(0, count);
        }
        protected AbstractMsmqListener(
            IQueueStrategy queueStrategy,
            Uri endpoint,
            int threadCount,
            IMessageSerializer messageSerializer,
            IEndpointRouter endpointRouter,
            TransactionalOptions transactional)
        {
            this.queueStrategy = queueStrategy;
            this.messageSerializer = messageSerializer;
            this.endpointRouter = endpointRouter;
            this.endpoint = endpoint;

            this.threadCount = threadCount;
            threads = new Thread[threadCount];

            switch (transactional)
            {
                case TransactionalOptions.Transactional:
                    this.transactional = true;
                    break;
                case TransactionalOptions.NonTransactional:
                    this.transactional = false;
                    break;
                case TransactionalOptions.FigureItOut:
                    this.transactional = null;
                    break;
                default:
                    throw new ArgumentOutOfRangeException("transactional");
            }
            messageBuilder = new MsmqMessageBuilder(this.messageSerializer);
            this.messageBuilder.Initialize(Endpoint);
        }
Exemple #3
0
        public static void Test(ITransport t, IQueueStrategy strategy,
                                Endpoint queueEndpoint, Action <Message> send, Func <MessageEnumerator>
                                enumer)
        {
            Guid id         = Guid.NewGuid();
            var  serializer = new XmlMessageSerializer(new
                                                       DefaultReflection(), new DefaultKernel());

            var subscriptionStorage = new MsmqSubscriptionStorage(new
                                                                  DefaultReflection(),
                                                                  serializer,
                                                                  queueEndpoint.Uri,
                                                                  new
                                                                  EndpointRouter(),
                                                                  strategy);

            subscriptionStorage.Initialize();

            var wait = new ManualResetEvent(false);

            subscriptionStorage.SubscriptionChanged += () => wait.Set();

            t.AdministrativeMessageArrived +=
                subscriptionStorage.HandleAdministrativeMessage;

            Message msg = new MsmqMessageBuilder
                              (serializer, new DefaultKernel()).BuildFromMessageBatch(new
                                                                                      AddInstanceSubscription
            {
                Endpoint = queueEndpoint.Uri.ToString(),
                InstanceSubscriptionKey = id,
                Type = typeof(TestMessage2).FullName,
            });

            send(msg);

            wait.WaitOne();

            msg = new MsmqMessageBuilder
                      (serializer, new DefaultKernel()).BuildFromMessageBatch(new
                                                                              RemoveInstanceSubscription
            {
                Endpoint = queueEndpoint.Uri.ToString(),
                InstanceSubscriptionKey = id,
                Type = typeof(TestMessage2).FullName,
            });

            wait.Reset();

            send(msg);

            wait.WaitOne();

            IEnumerable <Uri> uris = subscriptionStorage
                                     .GetSubscriptionsFor(typeof(TestMessage2));

            Assert.Equal(0, uris.Count());

            int count = 0;
            MessageEnumerator copy = enumer();

            while (copy.MoveNext())
            {
                count++;
            }
            Assert.Equal(0, count);
        }