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; } }