예제 #1
0
파일: Program.cs 프로젝트: lulzzz/OpcUaDemo
            private async Task MicrosoftOpcUaServer()
            {
                ApplicationInstance application = new ApplicationInstance
                {
                    ApplicationName   = "MicrosoftPerformanceOpcUaServer",
                    ApplicationType   = ApplicationType.Server,
                    ConfigSectionName = "MicrosoftOpcUa"
                };
                ApplicationConfiguration config = await application.LoadApplicationConfiguration(false);

                bool haveAppCertificate = await application.CheckApplicationInstanceCertificate(false, 0);

                if (!haveAppCertificate)
                {
                    throw new Exception("应用程序实例认证失败!");
                }
                if (!config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
                {
                    config.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation);
                }
                server = new MicrosoftOpcUaServer();
                await application.Start(server);

                status = Task.Run(new Action(StatusThread));
                server.CurrentInstance.SessionManager.SessionActivated += EventStatus;
                server.CurrentInstance.SessionManager.SessionClosing   += EventStatus;
                server.CurrentInstance.SessionManager.SessionCreated   += EventStatus;
            }
예제 #2
0
파일: Program.cs 프로젝트: lulzzz/OpcUaDemo
            public void Run()
            {
                try
                {
                    exitCode = ExitCode.ErrorServerNotStarted;
                    MicrosoftOpcUaServer().Wait();
                    Console.WriteLine("服务已启动. 按 Ctrl-C 退出...");
                    exitCode = ExitCode.ErrorServerRunning;
                }
                catch (Exception ex)
                {
                    Utils.Trace("服务启动结果异常:" + ex.Message);
                    Console.WriteLine("异常: {0}", ex.Message);
                    exitCode = ExitCode.ErrorServerException;
                    return;
                }

                ManualResetEvent quitEvent = new ManualResetEvent(false);

                try
                {
                    Console.CancelKeyPress += (sender, eArgs) =>
                    {
                        quitEvent.Set();
                        eArgs.Cancel = true;
                    };
                }
                catch
                {
                }
                quitEvent.WaitOne(serverRunTime);
                if (server != null)
                {
                    Console.WriteLine("服务已停止. 等待退出...");
                    using (MicrosoftOpcUaServer _server = server)
                    {
                        server = null;
                        status.Wait();
                        _server.Stop();
                    }
                }
                exitCode = ExitCode.Ok;
            }