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"); } builder = new MessageBuilder(this.messageSerializer, Endpoint); }
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 MessageBuilder (serializer).GenerateMsmqMessageFromMessageBatch(new AddInstanceSubscription { Endpoint = queueEndpoint.Uri.ToString(), InstanceSubscriptionKey = id, Type = typeof (TestMessage2).FullName, }); send(msg); wait.WaitOne(); msg = new MessageBuilder (serializer).GenerateMsmqMessageFromMessageBatch(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); }