void EnableDiscovery()
        {
            Debug.Assert(State != CommunicationState.Opened);

            IEndpointBehavior registryBehavior = new ServiceRegistrySettings(DiscoveryType.Public);

            foreach (ServiceEndpoint endpoint in Description.Endpoints)
            {
                endpoint.Behaviors.Add(registryBehavior);
            }


            //Launch the service to monitor discovery requests

            DiscoveryRequestService discoveryService = new DiscoveryRequestService(Description.Endpoints.ToArray());

            discoveryService.DiscoveryResponseBinding = DiscoveryResponseBinding;

            m_DiscoveryHost = new ServiceHost(discoveryService);

            m_DiscoveryHost.AddServiceEndpoint(typeof(IServiceBusDiscovery), DiscoveryRequestBinding, DiscoveryAddress.AbsoluteUri);

            TransportClientEndpointBehavior credentials = (this as IServiceBusProperties).Credential;

            m_DiscoveryHost.Description.Endpoints[0].Behaviors.Add(credentials);

            m_DiscoveryHost.Description.Endpoints[0].Behaviors.Add(registryBehavior);

            m_DiscoveryHost.Open();
        }
Exemplo n.º 2
0
        public static ServiceHost <T> CreateDiscoverableHost <T>(Uri scope = null) where T : class
        {
            ServiceHost <T> host = ServiceModelEx.DiscoveryFactory.CreateDiscoverableHost <T>(scope);

            DiscoveryRequestService requestService = new DiscoveryRequestService(host.Description.Endpoints.UnsafeToArray <ServiceEndpoint>());

            ServiceHost requestHost           = new ServiceHost(requestService);
            Uri         requestServiceAddress = new Uri(DiscoveryHelper.AvailableTcpBaseAddress.AbsoluteUri + typeof(T) + "/" + "DiscoveryEndpoint");

            requestHost.AddServiceEndpoint(typeof(IDiscovery), DiscoveryFactory.Binding, requestServiceAddress);

            host.Opened += delegate
            {
                try
                {
                    requestHost.Open();

                    IDiscoverySubscription pubsubProxy = ChannelFactory <IDiscoverySubscription> .CreateChannel(DiscoveryFactory.Binding, Address.DiscoverySubscription);

                    pubsubProxy.Subscribe(requestServiceAddress.AbsoluteUri);
                    (pubsubProxy as ICommunicationObject).Close();
                }
                catch
                {
                    Trace.WriteLine("Could not subscribe to discovery requests for service " + typeof(T));
                }

                IAnnouncements announcementsProxy = ChannelFactory <IAnnouncements> .CreateChannel(DiscoveryFactory.Binding, Address.Announcements);

                PublishAvailabilityEvent(host.Description.Endpoints.ToArray(), announcementsProxy.OnHello);
            };

            host.Closing += delegate
            {
                try
                {
                    IDiscoverySubscription pubsubProxy = ChannelFactory <IDiscoverySubscription> .CreateChannel(DiscoveryFactory.Binding, Address.DiscoverySubscription);

                    pubsubProxy.Unsubscribe(requestServiceAddress.AbsoluteUri);
                    (pubsubProxy as ICommunicationObject).Close();
                    requestHost.Close();
                }
                catch
                {
                    Trace.WriteLine("Could not unsubscribe to discovery requests for service " + typeof(T));
                }
                IAnnouncements announcementsProxy = ChannelFactory <IAnnouncements> .CreateChannel(DiscoveryFactory.Binding, Address.Announcements);

                PublishAvailabilityEvent(host.Description.Endpoints.ToArray(), announcementsProxy.OnBye);
            };
            return(host);
        }
Exemplo n.º 3
0
        void EnableDiscovery()
        {
            Debug.Assert(State != CommunicationState.Opened);

             IEndpointBehavior registryBehavior = new ServiceRegistrySettings(DiscoveryType.Public);
             foreach(ServiceEndpoint endpoint in Description.Endpoints)
             {
            endpoint.Behaviors.Add(registryBehavior);
             }

             //Launch the service to monitor discovery requests

             DiscoveryRequestService discoveryService = new DiscoveryRequestService(Description.Endpoints.ToArray());
             discoveryService.DiscoveryResponseBinding = DiscoveryResponseBinding;

             m_DiscoveryHost = new ServiceHost(discoveryService);

             m_DiscoveryHost.AddServiceEndpoint(typeof(IServiceBusDiscovery),DiscoveryRequestBinding,DiscoveryAddress.AbsoluteUri);

             TransportClientEndpointBehavior credentials = (this as IServiceBusProperties).Credential;
             m_DiscoveryHost.Description.Endpoints[0].Behaviors.Add(credentials);

             m_DiscoveryHost.Description.Endpoints[0].Behaviors.Add(registryBehavior);

             m_DiscoveryHost.Open();
        }