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; }
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; }