void OnConfigureDiscovery(object sender, EventArgs e)
        {
            string serviceNamespace = "";

            if (IsServiceBusAddress(m_MexAddressTextBox.Text))
            {
                serviceNamespace = ServiceBusHelper.ExtractNamespace(new Uri(m_MexAddressTextBox.Text));
            }

            bool announcementsEnables = m_ServiceBusAnnouncementSinks.ContainsKey(serviceNamespace);

            if (m_DisoveryPaths.ContainsKey(serviceNamespace) == false)
            {
                m_DisoveryPaths[serviceNamespace] = DiscoverableServiceHost.DiscoveryPath;
            }

            if (m_AnnouncementsPaths.ContainsKey(serviceNamespace) == false)
            {
                m_AnnouncementsPaths[serviceNamespace] = DiscoverableServiceHost.AnnouncementsPath;
            }

            DiscoveryDialog dialog = new DiscoveryDialog(serviceNamespace, m_DisoveryPaths[serviceNamespace], announcementsEnables, m_AnnouncementsPaths[serviceNamespace]);

            dialog.ShowDialog();

            serviceNamespace = dialog.ServiceNamespace;

            m_MexAddressTextBox.Text = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "").AbsoluteUri;

            m_DisoveryPaths[serviceNamespace] = dialog.DiscoveryPath;

            if (String.IsNullOrWhiteSpace(dialog.AnnouncementsPath) == false)
            {
                m_AnnouncementsPaths[serviceNamespace] = dialog.AnnouncementsPath;

                if (m_NamespaceCredentials.ContainsKey(ServiceBusHelper.ExtractNamespace(new Uri(m_MexAddressTextBox.Text))) == false)
                {
                    OnServiceBusLogOn(this, EventArgs.Empty);
                }

                Uri newAnouncementsAddress = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, m_AnnouncementsPaths[serviceNamespace]);

                if (m_ServiceBusAnnouncementSinks.ContainsKey(serviceNamespace))
                {
                    if (m_ServiceBusAnnouncementSinks[serviceNamespace].AnnouncementsAddress.AbsoluteUri != newAnouncementsAddress.AbsoluteUri)
                    {
                        m_ServiceBusAnnouncementSinks[serviceNamespace].Close();
                        m_ServiceBusAnnouncementSinks.Remove(serviceNamespace);
                    }
                    else
                    {
                        return;
                    }
                }

                TokenProvider tokenPorvider = m_NamespaceCredentials[serviceNamespace];

                m_ServiceBusAnnouncementSinks[serviceNamespace] = new ServiceBusAnnouncementSink <IMetadataExchange>(serviceNamespace, tokenPorvider);
                m_ServiceBusAnnouncementSinks[serviceNamespace].AnnouncementsAddress = newAnouncementsAddress;

                m_ServiceBusAnnouncementSinks[serviceNamespace].OnlineAnnouncementReceived  += OnHelloNotice;
                m_ServiceBusAnnouncementSinks[serviceNamespace].OfflineAnnouncementReceived += OnByeNotice;

                m_ServiceBusAnnouncementSinks[serviceNamespace].Open();
            }
            else
            {
                if (m_ServiceBusAnnouncementSinks.ContainsKey(serviceNamespace))
                {
                    m_ServiceBusAnnouncementSinks[serviceNamespace].Close();
                    m_ServiceBusAnnouncementSinks.Remove(serviceNamespace);
                }
            }
        }
      void OnConfigureDiscovery(object sender,EventArgs e)
      {
         string serviceNamespace = "";

         if(IsServiceBusAddress(m_MexAddressTextBox.Text))
         {
            serviceNamespace = ServiceBusHelper.ExtractNamespace(new Uri(m_MexAddressTextBox.Text));
         }

         bool announcementsEnables = m_ServiceBusAnnouncementSinks.ContainsKey(serviceNamespace);

         if(m_DisoveryPaths.ContainsKey(serviceNamespace) == false)
         {
            m_DisoveryPaths[serviceNamespace] = DiscoverableServiceHost.DiscoveryPath;
         }
         
         if(m_AnnouncementsPaths.ContainsKey(serviceNamespace) == false)
         {
            m_AnnouncementsPaths[serviceNamespace] = DiscoverableServiceHost.AnnouncementsPath;
         }

         DiscoveryDialog dialog = new DiscoveryDialog(serviceNamespace,m_DisoveryPaths[serviceNamespace],announcementsEnables,m_AnnouncementsPaths[serviceNamespace]);
         dialog.ShowDialog();
                
         serviceNamespace = dialog.ServiceNamespace;

         m_MexAddressTextBox.Text = ServiceBusEnvironment.CreateServiceUri("sb",serviceNamespace,"").AbsoluteUri;        

         m_DisoveryPaths[serviceNamespace] = dialog.DiscoveryPath;

         if(String.IsNullOrWhiteSpace(dialog.AnnouncementsPath) == false)
         {
            m_AnnouncementsPaths[serviceNamespace] = dialog.AnnouncementsPath;

            if(m_NamespaceCredentials.ContainsKey(ServiceBusHelper.ExtractNamespace(new Uri(m_MexAddressTextBox.Text))) == false)
            {
               OnServiceBusLogOn(this,EventArgs.Empty);
            }
               
            Uri newAnouncementsAddress = ServiceBusEnvironment.CreateServiceUri("sb",serviceNamespace,m_AnnouncementsPaths[serviceNamespace]);

            if(m_ServiceBusAnnouncementSinks.ContainsKey(serviceNamespace))
            {

               if(m_ServiceBusAnnouncementSinks[serviceNamespace].AnnouncementsAddress.AbsoluteUri != newAnouncementsAddress.AbsoluteUri)
               {
                  m_ServiceBusAnnouncementSinks[serviceNamespace].Close();
                  m_ServiceBusAnnouncementSinks.Remove(serviceNamespace);
               }
               else
               {
                  return;
               }
            }
            
            TokenProvider tokenPorvider = m_NamespaceCredentials[serviceNamespace];

            m_ServiceBusAnnouncementSinks[serviceNamespace] = new ServiceBusAnnouncementSink<IMetadataExchange>(serviceNamespace,tokenPorvider);
            m_ServiceBusAnnouncementSinks[serviceNamespace].AnnouncementsAddress = newAnouncementsAddress;

            m_ServiceBusAnnouncementSinks[serviceNamespace].OnlineAnnouncementReceived += OnHelloNotice;
            m_ServiceBusAnnouncementSinks[serviceNamespace].OfflineAnnouncementReceived   += OnByeNotice;
 
            m_ServiceBusAnnouncementSinks[serviceNamespace].Open();
         }
         else
         {
            if(m_ServiceBusAnnouncementSinks.ContainsKey(serviceNamespace))
            {
               m_ServiceBusAnnouncementSinks[serviceNamespace].Close();
               m_ServiceBusAnnouncementSinks.Remove(serviceNamespace);
            }
         }
      }