Opc.Ua.Server.StandardServer.RegisterWithDiscoveryServer C# (CSharp) Method

RegisterWithDiscoveryServer() public method

Registers the server with the discovery server.
public RegisterWithDiscoveryServer ( ) : bool
return bool
        public bool RegisterWithDiscoveryServer()
        {
            ApplicationConfiguration configuration = string.IsNullOrEmpty(base.Configuration.SourceFilePath) ? base.Configuration : ApplicationConfiguration.Load(new FileInfo(base.Configuration.SourceFilePath), ApplicationType.Server, null, false);
            CertificateValidationEventHandler registrationCertificateValidator = new CertificateValidationEventHandler(RegistrationValidator_CertificateValidation);
            configuration.CertificateValidator.CertificateValidation += registrationCertificateValidator;            

            try
            {
                // try each endpoint.
                foreach (ConfiguredEndpoint endpoint in m_registrationEndpoints.Endpoints)
                {
                    RegistrationClient client = null;

                    try
                    {
                        // update from the server.
                        bool updateRequired = true;

                        lock (m_registrationLock)
                        {
                            updateRequired = endpoint.UpdateBeforeConnect;
                        }

                        if (updateRequired)
                        {
                            endpoint.UpdateFromServer(m_bindingFactory);
                        }

                        lock (m_registrationLock)
                        {
                            endpoint.UpdateBeforeConnect = false;
                        }

                        // create the client.
                        client = RegistrationClient.Create(
                            configuration,
                            endpoint.Description,
                            endpoint.Configuration,
                            m_bindingFactory,
                            base.InstanceCertificate);

                        // register the server.
                        RequestHeader requestHeader = new RequestHeader();
                        requestHeader.Timestamp = DateTime.UtcNow;
                        client.OperationTimeout = 10000;

                        try
                        {
                            ExtensionObjectCollection discoveryConfiguration = new ExtensionObjectCollection();
                            StatusCodeCollection configurationResults = null;
                            DiagnosticInfoCollection diagnosticInfos = null;

                            client.RegisterServer2(
                                requestHeader,
                                m_registrationInfo,
                                discoveryConfiguration,
                                out configurationResults,
                                out diagnosticInfos);

                            return true;
                        }
                        catch (Exception e)
                        {
                            // fall back to calling RegisterServer in case RegisterServer2 fails.
                            Utils.Trace("RegisterServer2 failed for: {0}. Falling back to RegisterServer. Exception={1}.", endpoint.EndpointUrl, e.Message);

                            client.RegisterServer(requestHeader, m_registrationInfo);
                            return true;
                        }
                    }
                    catch (Exception e)
                    {
                        Utils.Trace("RegisterServer failed for: {0}. Exception={1}", endpoint.EndpointUrl, e.Message);
                    }
                    finally
                    {
                        if (client != null)
                        {
                            try
                            {
                                client.Close();
                            }
                            catch (Exception e)
                            {
                                Utils.Trace("Could not cleanly close connection with LDS. Exception={0}", e.Message);
                            }
                        }
                    }
                }
            }
            finally
            {
                if (configuration != null)
                {
                    configuration.CertificateValidator.CertificateValidation -= registrationCertificateValidator;
                }
            }

            return false;
        }