コード例 #1
0
        public static PullPointSubscriptionClient GetPullPointSubClient(string ip, int port, string toHeaderAddr, List <MessageHeader> headers)
        {
            //EndpointAddress serviceAddress = new EndpointAddress(string.Format("http://{0}:{1}/onvif/event_service", ip, port));
            AddressHeader[] addrHeader; // = AddressHeader.CreateAddressHeader("Action", "http://www.w3.org/2005/08/addressing", "http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeRequest");
            addrHeader    = new AddressHeader[2];
            addrHeader[0] = AddressHeader.CreateAddressHeader("Action", "http://www.w3.org/2005/08/addressing", "http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesRequest");
            addrHeader[1] = AddressHeader.CreateAddressHeader("To", "http://www.w3.org/2005/08/addressing", toHeaderAddr);
            //addrHeader[1] = AddressHeader.CreateAddressHeader("MessageID", "http://www.w3.org/2005/08/addressing", "urn:uuid:e47b9746-c5c1-455e-839f-0db5bed7d8c7");
            //addrHeader[1] = AddressHeader.CreateAddressHeader("ReplyTo", "http://www.w3.org/2005/08/addressing", "http://www.w3.org/2005/08/addressing/anonymous");

            //MessageHeader[] msgHeader;
            //msgHeader = new MessageHeader[1];
            //msgHeader[0] = MessageHeader.CreateHeader("Action", "http://www.w3.org/2005/08/addressing", "http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeRequest", true);

            EndpointAddress serviceAddress = new EndpointAddress(
                new System.Uri(string.Format("http://{0}:{1}/onvif/event_service", ip, port)),
                addrHeader);

            HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();

            httpBinding.AuthenticationScheme = AuthenticationSchemes.Digest;

            var messageElement = new TextMessageEncodingBindingElement();

            messageElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None);
            CustomBinding bind = new CustomBinding(messageElement, httpBinding);

            PullPointSubscriptionClient ppsc = new PullPointSubscriptionClient(bind, serviceAddress);

            return(ppsc);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        public static NotificationMessageHolderType[] GetEvents(Structures set)
        {
            try
            {
                //if (set.GetPTZTokens() == "" || !set.IsActive) return false;

                var messageElement = new TextMessageEncodingBindingElement();
                messageElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None);
                HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();
                httpBinding.AuthenticationScheme = AuthenticationSchemes.Basic;
                CustomBinding               bind         = new CustomBinding(messageElement, httpBinding);
                EndpointAddress             mediaAddress = new EndpointAddress(set.GetONVIF + "/onvif/event");
                PullPointSubscriptionClient mediaClient  = new PullPointSubscriptionClient(bind, mediaAddress);
                mediaClient.ClientCredentials.UserName.UserName = set.Login;
                mediaClient.ClientCredentials.UserName.Password = set.Password;

                NotificationMessageHolderType[] t;
                DateTime term;
                var      nodes = mediaClient.PullMessages("1", 1, null, out term, out t);

                return(t);
            }
            catch
            {
                return(new NotificationMessageHolderType[] { });
            }
        }
コード例 #4
0
        /// <summary>
        /// Creates PullPointSubscription client using address passed.
        /// </summary>
        /// <param name="endpointReference">Service address.</param>
        /// <returns></returns>
        protected PullPointSubscriptionClient CreatePullPointSubscriptionClient(Proxies.Event.EndpointReferenceType endpointReference)
        {
            Binding binding = CreateEventServiceBinding(endpointReference.Address.Value);

            _pullPointSubscriptionClient = new PullPointSubscriptionClient(binding, new EndpointAddress(endpointReference.Address.Value));

            AddSecurityBehaviour(_pullPointSubscriptionClient.Endpoint);
            AttachAddressing(_pullPointSubscriptionClient.Endpoint, endpointReference);

            SetupTimeout(_pullPointSubscriptionClient.InnerChannel);

            return(_pullPointSubscriptionClient);
        }
コード例 #5
0
        public OnVif1Events(OnVifDevice onVifDevice) : base(onVifDevice)
        {
            //   m_ErrorMessage = "";
            m_PullPointResponse = null;
            //   m_onVifDevice = onVifDevice;
            m_EventPropertiesResponse = null;
            m_EventPortTypeClient     = null;

            m_PullPointSubscriptionClient = null;
            m_SubscriptionManagerClient   = null;
            //       m_initialised = false;
            m_subscriptionTerminationTime = TimeSpan.FromSeconds(20);
        }
コード例 #6
0
        public static PullPointSubscriptionClient GetPullPointSubClient(string ip, int port)
        {
            EndpointAddress serviceAddress = new EndpointAddress(string.Format("http://{0}:{1}/onvif/event_service", ip, port));

            HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();

            httpBinding.AuthenticationScheme = AuthenticationSchemes.Digest;

            var messageElement = new TextMessageEncodingBindingElement();

            messageElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None);
            CustomBinding bind = new CustomBinding(messageElement, httpBinding);

            PullPointSubscriptionClient ppsc = new PullPointSubscriptionClient(bind, serviceAddress);

            return(ppsc);
        }
コード例 #7
0
        public static void ManejaEventos(string uri)
        {
            try
            {
                ServicePointManager.Expect100Continue = false;
                EndpointAddress             endPointAddress      = new EndpointAddress(uri);
                HttpTransportBindingElement httpTransportBinding = new HttpTransportBindingElement {
                    AuthenticationScheme = AuthenticationSchemes.Digest
                };
                httpTransportBinding.KeepAliveEnabled = true;
                TextMessageEncodingBindingElement textMessageEncodingBinding = new TextMessageEncodingBindingElement {
                    MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.WSAddressing10)
                };
                PasswordDigestBehavior passwordDigestBehavior = new PasswordDigestBehavior("julian", "julian");

                CustomBinding customBinding = new CustomBinding(textMessageEncodingBinding, httpTransportBinding);
                customBinding.SendTimeout = new TimeSpan(0, 0, 10);



                EventPortTypeClient ept = new EventPortTypeClient(customBinding, endPointAddress);
                ept.Endpoint.Behaviors.Add(passwordDigestBehavior);
                Console.WriteLine("Status 1 : " + ept.State.ToString());

                ept.Open();
                Console.WriteLine("Status 2 : " + ept.State.ToString());

                ept.GetType();

                ept.GetHashCode();



                FilterType filter       = new FilterType();
                string     initTermTime = null;
                CreatePullPointSubscriptionSubscriptionPolicy policy =
                    new CreatePullPointSubscriptionSubscriptionPolicy();

                XmlElement[]               elems1 = new XmlElement[10];
                System.DateTime            time1  = new System.DateTime();
                Nullable <System.DateTime> time2  = new System.DateTime();

                EndpointReferenceType endpoint = ept.CreatePullPointSubscription(filter, "PT60M", policy, ref elems1, out time1, out time2);


                System.DateTime CurrentTime = new System.DateTime();
                NotificationMessageHolderType[] NotificationMessages = new NotificationMessageHolderType[0];
                PullPointSubscriptionClient.PullMessages()

                PullPointSubscriptionClient.PullMessages("PT5M", 99, Any, out CurrentTime, out NotificationMessages);


                PullPointSubscriptionClient subbind = new PullPointSubscriptionClient(customBinding, endPointAddress);
                subbind.Endpoint.Behaviors.Add(passwordDigestBehavior);



                string          timeOut  = "PT60.000S";
                int             mesLimit = 100;
                XmlElement[]    elemns2  = new XmlElement[10];
                System.DateTime termTime = new System.DateTime();
                NotificationMessageHolderType[] messHolder =
                    new NotificationMessageHolderType[0];



                subbind.PullMessages(timeOut, mesLimit, elemns2, out termTime, out messHolder);

                for (int i = 0; i < messHolder.Length; i++)
                {
                    Console.WriteLine("parsing");
                }


                Console.WriteLine("--------- NO CATCH --------- ");
            }
            catch (Exception eee)
            {
                Console.WriteLine("manejando eventos: " + eee);
            }
        }
コード例 #8
0
        public override async Task <bool> InitalizeAsync()
        {
            if (this.m_onVifDevice.ServicesResponse == null)
            {
                bool b = await this.m_onVifDevice.InitalizeDeviceAsync();

                if (this.m_onVifDevice.ServicesResponse == null)
                {
                    return(false);
                }
            }

            try
            {
                foreach (var service in this.m_onVifDevice.ServicesResponse.Service)
                {
                    if (service.Namespace == "http://www.onvif.org/ver10/events/wsdl")
                    {
                        string serviceAdress = service.XAddr;

                        HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();
                        httpBinding.AuthenticationScheme = AuthenticationSchemes.Digest;
                        var messageElement = new TextMessageEncodingBindingElement();
                        messageElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.WSAddressing10);
                        CustomBinding binding = new CustomBinding(messageElement, httpBinding);



                        /*
                         * this.m_EventPortTypeClient = new EventPortTypeClient(binding, new EndpointAddress($"http://{ this.m_onVifDevice.Hostname}/onvif/event_service"));
                         * this.m_EventPortTypeClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetPasswordDigestBehavior);
                         * CreatePullPointSubscriptionRequest request = new CreatePullPointSubscriptionRequest();
                         * request.InitialTerminationTime = "PT60S";
                         * request.SubscriptionPolicy = new CreatePullPointSubscriptionSubscriptionPolicy();
                         *
                         *
                         * m_PullPointResponse = await this.m_EventPortTypeClient.CreatePullPointSubscriptionAsync(request);
                         *
                         *
                         *
                         *
                         * PullMessagesRequest message = new PullMessagesRequest("PT1S", 1024, null);
                         *
                         * await m_PullPointSubscriptionClient.PullMessagesAsync(message);
                         *
                         * GetEventPropertiesRequest eventrequest = new GetEventPropertiesRequest();
                         * m_EventPropertiesResponse =await this.m_EventPortTypeClient.GetEventPropertiesAsync(eventrequest);
                         */
                        OnvifDevice.Capabilities response = await this.m_onVifDevice.GetDeviceCapabilitiesAsync();



                        NotificationConsumerClient consclient = new NotificationConsumerClient(binding, new EndpointAddress(serviceAdress));

                        consclient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetPasswordDigestBehavior);
                        consclient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetBasicBasicAuthBehaviour);

                        OnvifEvent10.Notify request = new OnvifEvent10.Notify();



                        //  await consclient.NotifyAsync(request);



                        //     await consclient.OpenAsync();

                        NotificationConsumerService _notificationConsumerService = new NotificationConsumerService();
                        //        _notificationConsumerService.NewNotification += _notificationConsumerService_NewNotification;
                        //       ServiceHost _notificationConsumerServiceHost = new ServiceHost(_notificationConsumerService, new Uri("http://localhost:8085/NotificationConsumerService"));
                        //       _notificationConsumerServiceHost.Open();


                        NotificationProducerClient client = new NotificationProducerClient(binding, new EndpointAddress(serviceAdress));
                        client.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetPasswordDigestBehavior);
                        client.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetBasicBasicAuthBehaviour);

                        var subScribe = new Subscribe()
                        {
                            ConsumerReference = new EndpointReferenceType
                            {
                                Address = new AttributedURIType {
                                    Value = consclient.Endpoint.Address.Uri.ToString()
                                },
                            }
                        };


                        subScribe.InitialTerminationTime = "PT2H";
                        SubscribeResponse1 resp = await client.SubscribeAsync(subScribe);



                        if ((response.Events != null) && response.Events.WSSubscriptionPolicySupport)
                        {
                            m_PullPointSubscriptionClient = new PullPointSubscriptionClient(binding, new EndpointAddress(serviceAdress));
                            m_SubscriptionManagerClient   = new SubscriptionManagerClient(binding, new EndpointAddress(serviceAdress));

                            m_PullPointSubscriptionClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetPasswordDigestBehavior);
                            m_PullPointSubscriptionClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetBasicBasicAuthBehaviour);
                            m_SubscriptionManagerClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetPasswordDigestBehavior);
                            m_SubscriptionManagerClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetBasicBasicAuthBehaviour);
                            return(true);
                        }
                        else
                        {
                            //    throw new DeviceEventReceiverException("Device doesn't support pull point subscription");
                        }


                        if ((response.Events != null) && response.Events.WSPullPointSupport)
                        {
                            m_PullPointSubscriptionClient = new PullPointSubscriptionClient(binding, new EndpointAddress(serviceAdress));
                            m_SubscriptionManagerClient   = new SubscriptionManagerClient(binding, new EndpointAddress(serviceAdress));

                            m_PullPointSubscriptionClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetPasswordDigestBehavior);
                            m_PullPointSubscriptionClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetBasicBasicAuthBehaviour);
                            m_SubscriptionManagerClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetPasswordDigestBehavior);
                            m_SubscriptionManagerClient.Endpoint.EndpointBehaviors.Add(this.m_onVifDevice.GetBasicBasicAuthBehaviour);
                            return(true);
                        }
                        else
                        {
                            throw new DeviceEventReceiverException("Device doesn't support pull point subscription");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                m_ErrorMessage = ex.Message;
                return(false);
            }

            return(m_initialised);
        }