Пример #1
0
        private async Task ConsoleSampleServer()
        {
            ApplicationInstance.MessageDlg = new ApplicationMessageDlg();
            ApplicationInstance application = new ApplicationInstance();

            application.ApplicationName   = "UA Core Sample Server";
            application.ApplicationType   = ApplicationType.Server;
            application.ConfigSectionName = Utils.IsRunningOnMono() ? "Opc.Ua.MonoSampleServer" : "Opc.Ua.SampleServer";

            // load the application configuration.
            ApplicationConfiguration config = await application.LoadApplicationConfiguration(false);

            // check the application certificate.
            bool haveAppCertificate = await application.CheckApplicationInstanceCertificate(false, 0);

            if (!haveAppCertificate)
            {
                throw new Exception("Application instance certificate invalid!");
            }

            if (!config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
            {
                config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation);
            }

            // start the server.
            Server = new SampleServer();
            await application.Start(Server);

            if (ReverseConnectUrl != null)
            {
                Server.AddReverseConnection(ReverseConnectUrl);
            }

            var reverseConnections = Server.GetReverseConnections();

            if (reverseConnections?.Count > 0)
            {
                // print reverse connect info
                Console.WriteLine("Reverse Connect Clients:");
                foreach (var connection in reverseConnections)
                {
                    Console.WriteLine(connection.Key);
                }
            }

            // print endpoint info
            Console.WriteLine("Server Endpoints:");
            var endpoints = Server.GetEndpoints().Select(e => e.EndpointUrl).Distinct();

            foreach (var endpoint in endpoints)
            {
                Console.WriteLine(endpoint);
            }

            // start the status thread
            Status = Task.Run(new Action(StatusThread));

            // print notification on session events
            Server.CurrentInstance.SessionManager.SessionActivated += EventStatus;
            Server.CurrentInstance.SessionManager.SessionClosing   += EventStatus;
            Server.CurrentInstance.SessionManager.SessionCreated   += EventStatus;
        }