public void Subscribe(SubscriptionEndpoint subscription)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("ServiceBusRuntime");
            }

            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            if (subscription.Dispatcher.Runtime != null)
            {
                throw new InvalidOperationException("Subscription is attached to a bus already");
            }

            bool added = false;

            try
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    _subscriptions.Write(subscriptions =>
                    {
                        subscriptions.Add(subscription);
                        subscription.Dispatcher.Runtime = this;
                        added = true;
                    });

                    if (_started)
                    {
                        subscription.Dispatcher.StartInternal();
                    }


                    foreach (RuntimeService service in ServiceLocator.GetAllInstances <RuntimeService>())
                    {
                        service.OnSubscriptionAdded(subscription);
                    }

                    EventHandler <EndpointEventArgs> subscribedEvent = SubscriptionAdded;
                    if (subscribedEvent != null)
                    {
                        subscribedEvent(this, new EndpointEventArgs(subscription));
                    }

                    ts.Complete();
                }
            }
            catch
            {
                if (added)
                {
                    // Remove subscription on failure
                    _subscriptions.Write(subscriptions =>
                    {
                        subscriptions.Remove(subscription);
                    });
                }
                throw;
            }
        }