/// <summary>
        /// Hosts a WAMP meta-api service describing the given realm.
        /// </summary>
        /// <param name="hostedRealm">The given realm.</param>
        /// <returns>A disposable: disposing it will unregister the hosted meta-api service.</returns>
        public static IDisposable HostMetaApiService(this IWampHostedRealm hostedRealm)
        {
            WampRealmDescriptorService service = new WampRealmDescriptorService(hostedRealm);

            CompositeDisposable disposable =
                HostDisposableService(hostedRealm, service, CalleeRegistrationInterceptor.Default);

            BrokerFeatures brokerFeatures = hostedRealm.Roles.Broker.Features;
            DealerFeatures dealerFeatures = hostedRealm.Roles.Dealer.Features;

            brokerFeatures.SessionMetaApi      = true;
            brokerFeatures.SubscriptionMetaApi = true;
            dealerFeatures.SessionMetaApi      = true;
            dealerFeatures.RegistrationMetaApi = true;

            IDisposable featureDisposable = Disposable.Create(() =>
            {
                brokerFeatures.SessionMetaApi      = null;
                brokerFeatures.SubscriptionMetaApi = null;
                dealerFeatures.SessionMetaApi      = null;
                dealerFeatures.RegistrationMetaApi = null;
            });

            disposable.Add(featureDisposable);

            return(disposable);
        }
        /// <summary>
        /// Hosts a WAMP testament service for the given realm.
        /// </summary>
        /// <param name="hostedRealm">The given realm.</param>
        /// <returns>A disposable: disposing it will unregister the hosted testaments service.</returns>
        public static IDisposable HostTestamentService(this IWampHostedRealm hostedRealm)
        {
            WampTestamentService service = new WampTestamentService(hostedRealm);

            RegisterOptions registerOptions = new RegisterOptions {
                DiscloseCaller = true
            };

            CompositeDisposable disposable = HostDisposableService(hostedRealm, service, new CalleeRegistrationInterceptor(registerOptions));

            DealerFeatures dealerFeatures = hostedRealm.Roles.Dealer.Features;

            dealerFeatures.TestamentMetaApi = true;

            IDisposable featureDisposable = Disposable.Create(() =>
            {
                dealerFeatures.TestamentMetaApi = null;
            });

            disposable.Add(featureDisposable);

            return(disposable);
        }