private void btnSubscribe_Click(object sender, EventArgs e)
        {
            try
            {
                EventsReceiver listener = new EventsReceiver();
                listener.NotificationReceived += listener_NotificationReceived;
                listener.Name = tbEventsReceiver.Text;
                _listener     = listener;

                _host = new ServiceHost(listener, new Uri(tbEventsReceiver.Text));
                ServiceEndpoint endpoint = _host.AddServiceEndpoint(typeof(Proxies.Events.NotificationConsumer), new WSHttpBinding(SecurityMode.None), string.Empty);
                _host.Open();


                Subscribe request = new Subscribe();
                request.ConsumerReference               = new EndpointReferenceType();
                request.ConsumerReference.Address       = new AttributedURIType();
                request.ConsumerReference.Address.Value = tbEventsReceiver.Text;

                if (!string.IsNullOrEmpty(tbTopicsFilter.Text))
                {
                    request.Filter = CreateFilter();
                }

                request.InitialTerminationTime = tbSubscriptionTime.Text;

                SubscribeResponse response = Client.Subscribe(request);
                tcSubscription.SelectedTab   = tpManageSubscription;
                _subscriptionReference       = response.SubscriptionReference;
                tbSubscriptionReference.Text = _subscriptionReference.Address.Value;
                _subscribed = true;
                if (response.TerminationTime.HasValue)
                {
                    _terminationTime       = response.TerminationTime.Value;
                    tbTerminationTime.Text = _terminationTime.ToString("hh:mm:ss.fff");

                    DisplayTimeLeft();
                }

                EndpointAddress            addr      = new EndpointAddress(_subscriptionReference.Address.Value);
                EndpointReferenceBehaviour behaviour = new EndpointReferenceBehaviour(response.SubscriptionReference);

                _subscriptionManager = new SubscriptionManagerClient(_custombindingSoap12, addr);
                _subscriptionManager.Endpoint.Behaviors.Add(behaviour);

                _pullPointSubscriptionClient = new PullPointSubscriptionClient(_custombindingSoap12, addr);
                _pullPointSubscriptionClient.Endpoint.Behaviors.Add(behaviour);

                timer.Start();
                btnSubscribe.Enabled               = false;
                btnRenew.Enabled                   = true;
                btnUnsubscribe.Enabled             = true;
                btnSetSynchronizationPoint.Enabled = true;
            }
            catch (Exception exc)
            {
                _host.Close();
                MessageBox.Show(exc.Message);
            }
        }
        void listener_NotificationReceived(EventsReceiver source, Notify1 obj)
        {
            Invoke(new Action(() =>
            {
                foreach (NotificationMessageHolderType message in obj.Notify.NotificationMessage)
                {
                    string topic = string.Empty;
                    foreach (XmlNode node in message.Topic.Any)
                    {
                        XmlText topicText = node as XmlText;
                        if (topicText != null)
                        {
                            topic = topicText.Value;
                            break;
                        }
                    }

                    tbConsole.AppendText("Topic: " + topic + Environment.NewLine);
                    tbConsole.AppendText(message.Message.OuterXml);
                    tbConsole.AppendText(Environment.NewLine);
                }

                tbConsole.AppendText(Environment.NewLine);
            }));
        }