public void StopServer() { if (m_server != null) { Console.WriteLine("Server stopped. Waiting for exit..."); using (GlobalDiscoverySampleServer server = m_server) { m_server = null; // Stop server and dispose server.Stop(); } } }
public async Task StartServer(bool clean, int basePort = -1) { ApplicationInstance.MessageDlg = new ApplicationMessageDlg(); ApplicationInstance application = new ApplicationInstance { ApplicationName = "Global Discovery Server", ApplicationType = ApplicationType.Server, ConfigSectionName = "Opc.Ua.GlobalDiscoveryTestServer" }; // load the application configuration. ApplicationConfiguration config = await application.LoadApplicationConfiguration(false); TestUtils.PatchBaseAddressesPorts(config, basePort); if (clean) { string thumbprint = config.SecurityConfiguration.ApplicationCertificate.Thumbprint; if (thumbprint != null) { using (var store = config.SecurityConfiguration.ApplicationCertificate.OpenStore()) { await store.Delete(thumbprint); } } // always start with clean cert store TestUtils.CleanupTrustList(config.SecurityConfiguration.TrustedIssuerCertificates.OpenStore()); TestUtils.CleanupTrustList(config.SecurityConfiguration.TrustedPeerCertificates.OpenStore()); TestUtils.CleanupTrustList(config.SecurityConfiguration.RejectedCertificateStore.OpenStore()); } if (clean) { string thumbprint = config.SecurityConfiguration.ApplicationCertificate.Thumbprint; if (thumbprint != null) { using (var store = config.SecurityConfiguration.ApplicationCertificate.OpenStore()) { await store.Delete(thumbprint); } } // always start with clean cert store TestUtils.CleanupTrustList(config.SecurityConfiguration.ApplicationCertificate.OpenStore()); TestUtils.CleanupTrustList(config.SecurityConfiguration.TrustedIssuerCertificates.OpenStore()); TestUtils.CleanupTrustList(config.SecurityConfiguration.TrustedPeerCertificates.OpenStore()); TestUtils.CleanupTrustList(config.SecurityConfiguration.RejectedCertificateStore.OpenStore()); config = await application.LoadApplicationConfiguration(false); } TestUtils.PatchBaseAddressesPorts(config, basePort); // 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); } // get the DatabaseStorePath configuration parameter. GlobalDiscoveryServerConfiguration gdsConfiguration = config.ParseExtension <GlobalDiscoveryServerConfiguration>(); string databaseStorePath = Utils.ReplaceSpecialFolderNames(gdsConfiguration.DatabaseStorePath); if (clean) { // clean up database if (File.Exists(databaseStorePath)) { File.Delete(databaseStorePath); } // clean up GDS stores TestUtils.DeleteDirectory(gdsConfiguration.AuthoritiesStorePath); TestUtils.DeleteDirectory(gdsConfiguration.ApplicationCertificatesStorePath); foreach (var group in gdsConfiguration.CertificateGroups) { TestUtils.DeleteDirectory(group.BaseStorePath); } } // start the server. m_server = new GlobalDiscoverySampleServer( JsonApplicationsDatabase.Load(databaseStorePath), new CertificateGroup()); await application.Start(m_server); ServerState serverState = Server.GetStatus().State; if ((serverState = Server.GetStatus().State) != ServerState.Running) { throw new ServiceResultException("Server failed to start"); } }