/// <summary> /// Create the configuration and start the server. /// </summary> private async Task InternalStartServerAsync(TextWriter writer, int port) { Config.ServerConfiguration.BaseAddresses = new StringCollection() { $"{UriScheme}://localhost:{port}/{typeof(T).Name}" }; if (writer != null) { m_traceLogger = NUnitTraceLogger.Create(writer, Config, TraceMasks); } // check the application certificate. bool haveAppCertificate = await Application.CheckApplicationInstanceCertificate( true, CertificateFactory.DefaultKeySize, CertificateFactory.DefaultLifeTime).ConfigureAwait(false); if (!haveAppCertificate) { throw new Exception("Application instance certificate invalid!"); } // start the server. T server = new T(); if (AllNodeManagers && server is StandardServer standardServer) { Quickstarts.Servers.Utils.AddDefaultNodeManagers(standardServer); } await Application.Start(server).ConfigureAwait(false); Server = server; Port = port; }
/// <summary> /// Create the configuration and start the server. /// </summary> private async Task InternalStartServerAsync(TextWriter writer, int port) { ApplicationInstance application = new ApplicationInstance { ApplicationName = typeof(T).Name, ApplicationType = ApplicationType.Server }; // create the application configuration. Use temp path for cert stores. var pkiRoot = Path.GetTempPath() + Path.GetRandomFileName(); var endpointUrl = $"{UriScheme}://localhost:{port}/" + typeof(T).Name; var serverConfig = application.Build( "urn:localhost:UA:" + typeof(T).Name, "uri:opcfoundation.org:" + typeof(T).Name) .AsServer( new string[] { endpointUrl }); if (SecurityNone) { serverConfig.AddUnsecurePolicyNone(); } if (endpointUrl.StartsWith(Utils.UriSchemeHttps, StringComparison.InvariantCultureIgnoreCase)) { serverConfig.AddPolicy(MessageSecurityMode.SignAndEncrypt, SecurityPolicies.Basic256Sha256); } else if (endpointUrl.StartsWith(Utils.UriSchemeOpcTcp, StringComparison.InvariantCultureIgnoreCase)) { // add deprecated policies for opc.tcp tests serverConfig.AddPolicy(MessageSecurityMode.Sign, SecurityPolicies.Basic128Rsa15) .AddPolicy(MessageSecurityMode.Sign, SecurityPolicies.Basic256) .AddPolicy(MessageSecurityMode.SignAndEncrypt, SecurityPolicies.Basic128Rsa15) .AddPolicy(MessageSecurityMode.SignAndEncrypt, SecurityPolicies.Basic256) .AddSignPolicies() .AddSignAndEncryptPolicies(); } if (OperationLimits) { serverConfig.SetOperationLimits(new OperationLimits() { MaxNodesPerBrowse = 2500, MaxNodesPerRead = 250, MaxNodesPerWrite = 250, MaxNodesPerMethodCall = 500, MaxMonitoredItemsPerCall = 1000, MaxNodesPerTranslateBrowsePathsToNodeIds = 1000 }); } if (ReverseConnectTimeout != 0) { serverConfig.SetReverseConnect(new ReverseConnectServerConfiguration() { ConnectInterval = ReverseConnectTimeout / 4, ConnectTimeout = ReverseConnectTimeout, RejectTimeout = ReverseConnectTimeout / 4 }); } ApplicationConfiguration config = await serverConfig.AddSecurityConfiguration( "CN=" + typeof(T).Name + ", C=US, S=Arizona, O=OPC Foundation, DC=localhost", pkiRoot) .SetAutoAcceptUntrustedCertificates(AutoAccept) .Create().ConfigureAwait(false); if (writer != null) { m_traceLogger = NUnitTraceLogger.Create(writer, config, TraceMasks); } // check the application certificate. bool haveAppCertificate = await application.CheckApplicationInstanceCertificate( true, CertificateFactory.DefaultKeySize, CertificateFactory.DefaultLifeTime).ConfigureAwait(false); if (!haveAppCertificate) { throw new Exception("Application instance certificate invalid!"); } // start the server. T server = new T(); await application.Start(server).ConfigureAwait(false); Server = server; Port = port; }